You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2010/11/13 13:07:37 UTC
svn commit: r1034737 - in /click/trunk/click: documentation/docs/
extras/src/org/apache/click/extras/control/
framework/src/org/apache/click/control/
framework/test/org/apache/click/control/
Author: sabob
Date: Sat Nov 13 12:07:37 2010
New Revision: 1034737
URL: http://svn.apache.org/viewvc?rev=1034737&view=rev
Log:
Improved Fields to only be processed if they have an incoming request value. CLK-722
Added:
click/trunk/click/framework/test/org/apache/click/control/FieldTest.java
Modified:
click/trunk/click/documentation/docs/roadmap-changes.html
click/trunk/click/extras/src/org/apache/click/extras/control/AbstractContainerField.java
click/trunk/click/framework/src/org/apache/click/control/Checkbox.java
click/trunk/click/framework/src/org/apache/click/control/Field.java
click/trunk/click/framework/src/org/apache/click/control/FileField.java
Modified: click/trunk/click/documentation/docs/roadmap-changes.html
URL: http://svn.apache.org/viewvc/click/trunk/click/documentation/docs/roadmap-changes.html?rev=1034737&r1=1034736&r2=1034737&view=diff
==============================================================================
--- click/trunk/click/documentation/docs/roadmap-changes.html (original)
+++ click/trunk/click/documentation/docs/roadmap-changes.html Sat Nov 13 12:07:37 2010
@@ -174,6 +174,12 @@ Action support and light-weight stateful
</div>
<ul style="padding: 0em; margin-left:0em;margin-bottom: 2em">
<li class="change">
+ Improve fields to only be processed if there is a matching request
+ parameter. This improvement streamlines dynamic forms since fields
+ added at runtime won't bind their values or be validated
+ [<a target="_blank" href="https://issues.apache.org/jira/browse/CLK-722">CLK-722</a>].
+ </li>
+ <li class="change">
Added automapping support for GAE with a caveat that page templates
must be placed under the folders <tt>page</tt> or <tt>pages</tt>.
This issue was raised by Ke Sun
Modified: click/trunk/click/extras/src/org/apache/click/extras/control/AbstractContainerField.java
URL: http://svn.apache.org/viewvc/click/trunk/click/extras/src/org/apache/click/extras/control/AbstractContainerField.java?rev=1034737&r1=1034736&r2=1034737&view=diff
==============================================================================
--- click/trunk/click/extras/src/org/apache/click/extras/control/AbstractContainerField.java (original)
+++ click/trunk/click/extras/src/org/apache/click/extras/control/AbstractContainerField.java Sat Nov 13 12:07:37 2010
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.click.Context;
import org.apache.click.Control;
import org.apache.click.control.Container;
@@ -302,7 +303,32 @@ public abstract class AbstractContainerF
*/
@Override
public boolean onProcess() {
- boolean continueProcessing = super.onProcess();
+ boolean performProcessing = true;
+
+ if (isDisabled()) {
+ Context context = getContext();
+
+ // Switch off disabled property if field has an incoming request
+ // parameter.
+ if (context.hasRequestParameter(getName())) {
+ setDisabled(false);
+
+ } else {
+ // If field is disabled skip processing and validation
+ performProcessing = false;
+ }
+ }
+
+ if (performProcessing) {
+ bindRequestValue();
+
+ if (getValidate()) {
+ validate();
+ }
+ dispatchActionEvent();
+ }
+
+ boolean continueProcessing = true;
if (hasControls()) {
for (Control control : getControls()) {
Modified: click/trunk/click/framework/src/org/apache/click/control/Checkbox.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/Checkbox.java?rev=1034737&r1=1034736&r2=1034737&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/Checkbox.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/Checkbox.java Sat Nov 13 12:07:37 2010
@@ -19,6 +19,7 @@
package org.apache.click.control;
import java.text.MessageFormat;
+import org.apache.click.Context;
import org.apache.click.util.HtmlStringBuffer;
@@ -235,6 +236,40 @@ public class Checkbox extends Field {
}
/**
+ * Process the request Context setting the checked value if selected
+ * and invoking the control's listener if defined.
+ *
+ * @return true to continue Page event processing, false otherwise
+ */
+ @Override
+ public boolean onProcess() {
+ if (isDisabled()) {
+ Context context = getContext();
+
+ // Switch off disabled property if control has incoming request
+ // parameter. Normally this means the field was enabled via JS
+ if (context.hasRequestParameter(getName())) {
+ setDisabled(false);
+ } else {
+ // If field is disabled skip process event
+ return true;
+ }
+ }
+
+ // In Html an unchecked Checkbox does not submit it's name/value so we
+ // always validate and dispatch registered events
+ bindRequestValue();
+
+ if (getValidate()) {
+ validate();
+ }
+
+ dispatchActionEvent();
+
+ return true;
+ }
+
+ /**
* Render the HTML representation of the Checkbox.
*
* @see #toString()
Modified: click/trunk/click/framework/src/org/apache/click/control/Field.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/Field.java?rev=1034737&r1=1034736&r2=1034737&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/Field.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/Field.java Sat Nov 13 12:07:37 2010
@@ -1091,26 +1091,20 @@ public abstract class Field extends Abst
*/
@Override
public boolean onProcess() {
- if (isDisabled()) {
- Context context = getContext();
+ Context context = getContext();
- // Switch off disabled property if control has incoming request
- // parameter. Normally this means the field was enabled via JS
- if (context.hasRequestParameter(getName())) {
- setDisabled(false);
- } else {
- // If field is disabled skip process event
- return true;
- }
- }
+ if (context.hasRequestParameter(getName())) {
+ // Only process field if it participated in the incoming request
+ setDisabled(false);
- bindRequestValue();
+ bindRequestValue();
- if (getValidate()) {
- validate();
- }
+ if (getValidate()) {
+ validate();
+ }
- dispatchActionEvent();
+ dispatchActionEvent();
+ }
return true;
}
Modified: click/trunk/click/framework/src/org/apache/click/control/FileField.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/src/org/apache/click/control/FileField.java?rev=1034737&r1=1034736&r2=1034737&view=diff
==============================================================================
--- click/trunk/click/framework/src/org/apache/click/control/FileField.java (original)
+++ click/trunk/click/framework/src/org/apache/click/control/FileField.java Sat Nov 13 12:07:37 2010
@@ -19,6 +19,7 @@
package org.apache.click.control;
import java.text.MessageFormat;
+import org.apache.click.Context;
import org.apache.click.util.HtmlStringBuffer;
@@ -260,6 +261,33 @@ public class FileField extends Field {
}
/**
+ * Overrides onProcess to use {@link org.apache.click.Context#getFileItem(java.lang.String)}.
+ *
+ * @see org.apache.click.control.Field#onProcess()
+ *
+ * @return true to continue Page event processing or false otherwise
+ */
+ @Override
+ public boolean onProcess() {
+ Context context = getContext();
+
+ if (context.getFileItemMap().containsKey(getName())) {
+ // Only process field if it participated in the incoming request
+ setDisabled(false);
+
+ bindRequestValue();
+
+ if (getValidate()) {
+ validate();
+ }
+
+ dispatchActionEvent();
+ }
+
+ return true;
+ }
+
+ /**
* Render the HTML representation of the FileField.
*
* @see #toString()
@@ -321,8 +349,8 @@ public class FileField extends Field {
setError(null);
if (isRequired()) {
- FileItem fileItem = getFileItem();
- if (fileItem == null || StringUtils.isBlank(fileItem.getName())) {
+ FileItem localFileItem = getFileItem();
+ if (localFileItem == null || StringUtils.isBlank(localFileItem.getName())) {
setErrorMessage("file-required-error");
}
}
Added: click/trunk/click/framework/test/org/apache/click/control/FieldTest.java
URL: http://svn.apache.org/viewvc/click/trunk/click/framework/test/org/apache/click/control/FieldTest.java?rev=1034737&view=auto
==============================================================================
--- click/trunk/click/framework/test/org/apache/click/control/FieldTest.java (added)
+++ click/trunk/click/framework/test/org/apache/click/control/FieldTest.java Sat Nov 13 12:07:37 2010
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.click.control;
+
+import junit.framework.TestCase;
+import org.apache.click.MockContext;
+import org.apache.click.servlet.MockRequest;
+
+/**
+ *
+ */
+public class FieldTest extends TestCase {
+
+ /**
+ * Test Field onProcess.
+ */
+ public void testOnProcess() {
+ MockContext context = MockContext.initContext();
+ MockRequest request = context.getMockRequest();
+
+ Field field = new TextField("text");
+ field.setRequired(true);
+
+ assertEquals("", field.getValue());
+
+ // Test with valid request parameter
+ String expectedValue = "textvalue";
+
+ request.setParameter("text", expectedValue);
+
+ field.onProcess();
+
+ // Perform tests
+ assertEquals(expectedValue, field.getValue());
+ assertTrue(field.isValid());
+
+ // Test with empty request parameter
+ expectedValue = "";
+ request.setParameter("text", expectedValue);
+
+ field.onProcess();
+
+ // Perform tests
+ assertEquals(expectedValue, field.getValue());
+ // Since the field value is empty, test that required validation occurred
+ assertFalse(field.isValid());
+ }
+
+ /**
+ * Test Field onProcess if the Field's request parameter is not available.
+ */
+ public void testOnProcessWithoutRequestParameter() {
+ MockContext context = MockContext.initContext();
+
+ Field field = new TextField("text");
+ field.setRequired(true);
+
+ assertEquals("", field.getValue());
+
+ String expectedValue = "";
+
+ field.onProcess();
+
+ assertEquals(expectedValue, field.getValue());
+ assertTrue(field.isValid());
+ }
+}