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 2011/07/05 22:58:50 UTC

svn commit: r1143201 - in /wicket/branches/wicket-1.4.x/wicket/src: main/java/org/apache/wicket/markup/html/form/ test/java/org/apache/wicket/markup/html/form/

Author: ivaynberg
Date: Tue Jul  5 20:58:49 2011
New Revision: 1143201

URL: http://svn.apache.org/viewvc?rev=1143201&view=rev
Log:

Issue: WICKET-3873

Modified:
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java
    wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
    wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormComponentTest.java
    wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java?rev=1143201&r1=1143200&r2=1143201&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java Tue Jul  5 20:58:49 2011
@@ -44,6 +44,7 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.form.persistence.IValuePersister;
 import org.apache.wicket.markup.html.form.upload.FileUploadField;
 import org.apache.wicket.markup.html.form.validation.IFormValidator;
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.protocol.http.RequestUtils;
@@ -2053,6 +2054,14 @@ public class Form<T> extends WebMarkupCo
 		super.internalOnDetach();
 		setFlag(FLAG_SUBMITTED, false);
 
+		for (IFormValidator validator : getFormValidators())
+		{
+			if (validator != null && (validator instanceof IDetachable))
+			{
+				((IDetachable)validator).detach();
+			}
+		}
+
 		super.onDetach();
 	}
 

Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java?rev=1143201&r1=1143200&r2=1143201&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java Tue Jul  5 20:58:49 2011
@@ -35,6 +35,7 @@ import org.apache.wicket.Localizer;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.IPropertyReflectionAwareModel;
 import org.apache.wicket.util.convert.ConversionException;
@@ -1505,6 +1506,15 @@ public abstract class FormComponent<T> e
 	protected void onDetach()
 	{
 		super.onDetach();
+
+		for (IValidator<?> validator : getValidators())
+		{
+			if (validator != null && (validator instanceof IDetachable))
+			{
+				((IDetachable)validator).detach();
+			}
+		}
+
 		convertedInput = null;
 	}
 

Modified: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormComponentTest.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormComponentTest.java?rev=1143201&r1=1143200&r2=1143201&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormComponentTest.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormComponentTest.java Tue Jul  5 20:58:49 2011
@@ -22,9 +22,13 @@ import junit.framework.TestCase;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.model.IDetachable;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.WicketTester;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
 
 /**
  * 
@@ -69,6 +73,31 @@ public class FormComponentTest extends T
 		assertEquals("field2", page.field2.getDefaultLabel());
 	}
 
+	public void testValidatorsDetach()
+	{
+		class TestValidator<T> implements IValidator<T>, IDetachable
+		{
+			boolean detached = false;
+
+			public void detach()
+			{
+				detached = true;
+			}
+
+			public void validate(IValidatable<T> validatable)
+			{
+			}
+		}
+
+		TextField<String> field = new TextField<String>("s", Model.of(""));
+		TestValidator<String> v1 = new TestValidator();
+		TestValidator<String> v2 = new TestValidator();
+		field.add(v1).add(v2);
+		field.detach();
+		assertTrue(v1.detached);
+		assertTrue(v2.detached);
+	}
+
 	@Override
 	protected void tearDown() throws Exception
 	{
@@ -95,7 +124,5 @@ public class FormComponentTest extends T
 			return new StringResourceStream(
 				"<html><body><form wicket:id='form'><input wicket:id='field1' type='text'/><input wicket:id='field2' type='text'/></form></body></html>");
 		}
-
-
 	}
 }

Modified: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java?rev=1143201&r1=1143200&r2=1143201&view=diff
==============================================================================
--- wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java (original)
+++ wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/html/form/FormTest.java Tue Jul  5 20:58:49 2011
@@ -22,6 +22,8 @@ import org.apache.wicket.PageParameters;
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
 import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.validation.IFormValidator;
+import org.apache.wicket.model.IDetachable;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 
@@ -102,6 +104,37 @@ public class FormTest extends WicketTest
 		tester.assertRenderedPage(TestPage.class);
 	}
 
+	public void testValidatorsDetach()
+	{
+		class TestValidator implements IFormValidator, IDetachable
+		{
+			boolean detached = false;
+
+			public void detach()
+			{
+				detached = true;
+			}
+
+			public FormComponent<?>[] getDependentFormComponents()
+			{
+				return new FormComponent[] { };
+			}
+
+			public void validate(Form<?> form)
+			{
+			}
+		}
+
+		Form<?> form = new Form<Void>("form");
+		TestValidator v1 = new TestValidator();
+		TestValidator v2 = new TestValidator();
+		form.add(v1);
+		form.add(v2);
+		form.detach();
+		assertTrue(v1.detached);
+		assertTrue(v2.detached);
+	}
+
 	/** */
 	public static class TestPage extends WebPage implements IMarkupResourceStreamProvider
 	{