You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2008/09/06 20:24:32 UTC

svn commit: r692703 - /wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java

Author: ivaynberg
Date: Sat Sep  6 11:24:32 2008
New Revision: 692703

URL: http://svn.apache.org/viewvc?rev=692703&view=rev
Log:
WICKET:1820 multipart support for embedded forms

Modified:
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java

Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java?rev=692703&r1=692702&r2=692703&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java (original)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java Sat Sep  6 11:24:32 2008
@@ -71,7 +71,7 @@
  * type="submit" value="go"> suffices.
  * <p>
  * By default, the processing of a form works like this:
- * <li> The submitting component is looked up. An submitting IFormSubmittingComponent (such as a
+ * <li>The submitting component is looked up. An submitting IFormSubmittingComponent (such as a
  * button) is nested in this form (is a child component) and was clicked by the user. If an
  * IFormSubmittingComponent was found, and it has the defaultFormProcessing field set to false
  * (default is true), it's onSubmit method will be called right away, thus no validition is done,
@@ -79,17 +79,17 @@
  * respect, nesting an IFormSubmittingComponent with the defaultFormProcessing field set to false
  * has the same effect as nesting a normal link. If you want you can call validate() to execute form
  * validation, hasError() to find out whether validate() resulted in validation errors, and
- * updateFormComponentModels() to update the models of nested form components. </li>
- * <li> When no submitting IFormSubmittingComponent with defaultFormProcessing set to false was
+ * updateFormComponentModels() to update the models of nested form components.</li>
+ * <li>When no submitting IFormSubmittingComponent with defaultFormProcessing set to false was
  * found, this form is processed (method process()). Now, two possible paths exist:
  * <ul>
- * <li> Form validation failed. All nested form components will be marked invalid, and onError() is
- * called to allow clients to provide custom error handling code. </li>
- * <li> Form validation succeeded. The nested components will be asked to update their models and
+ * <li>Form validation failed. All nested form components will be marked invalid, and onError() is
+ * called to allow clients to provide custom error handling code.</li>
+ * <li>Form validation succeeded. The nested components will be asked to update their models and
  * persist their data is applicable. After that, method delegateSubmit with optionally the
  * submitting IFormSubmittingComponent is called. The default when there is a submitting
  * IFormSubmittingComponent is to first call onSubmit on that Component, and after that call
- * onSubmit on this form. Clients may override delegateSubmit if they want different behavior. </li>
+ * onSubmit on this form. Clients may override delegateSubmit if they want different behavior.</li>
  * </ul>
  * </li>
  * </li>
@@ -1425,6 +1425,37 @@
 		return new CookieValuePersister();
 	}
 
+	private boolean isMultiPart()
+	{
+		if (multiPart)
+		{
+			return true;
+		}
+		else
+		{
+			final boolean[] anyEmbeddedMultipart = new boolean[] { false };
+			visitChildren(Form.class, new IVisitor()
+			{
+
+				public Object component(Component component)
+				{
+					final Form form = (Form)component;
+					if (form.multiPart)
+					{
+						anyEmbeddedMultipart[0] = true;
+						return STOP_TRAVERSAL;
+					}
+					else
+					{
+						return CONTINUE_TRAVERSAL;
+					}
+				}
+
+			});
+			return anyEmbeddedMultipart[0];
+		}
+	}
+
 	/**
 	 * Handles multi-part processing of the submitted data.
 	 * 
@@ -1436,7 +1467,7 @@
 	 */
 	protected boolean handleMultiPart()
 	{
-		if (multiPart && !((WebRequest)getRequest()).isAjax())
+		if (isMultiPart() && !((WebRequest)getRequest()).isAjax())
 		{
 			// Change the request to a multipart web request so parameters are
 			// parsed out correctly
@@ -1600,7 +1631,7 @@
 				tag.put("action", Strings.escapeMarkup(url));
 			}
 
-			if (multiPart)
+			if (isMultiPart())
 			{
 				tag.put("enctype", "multipart/form-data");
 			}