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
        {


Reply via email to