Author: jdonnerstag
Date: Sun Jan 18 23:46:46 2009
New Revision: 735623

URL: http://svn.apache.org/viewvc?rev=735623&view=rev
Log:
fixed wicket-2027: FormComponentPanel does not work correctly inside a Border

Added:
    wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyTextField.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/TestHomePage.java
Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java?rev=735623&r1=735622&r2=735623&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java 
(original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/Form.java 
Sun Jan 18 23:46:46 2009
@@ -1157,7 +1157,10 @@
        {
                FormComponent.visitFormComponentsPostOrder(this, visitor);
 
-               visitChildrenInContainingBorder(visitor);
+               if (getParent() instanceof Border)
+               {
+                       FormComponent.visitFormComponentsPostOrder(getParent(), 
visitor);
+               }
        }
 
        /**
@@ -1969,16 +1972,7 @@
                MarkupContainer border = findParent(Border.class);
                if (border != null)
                {
-                       Iterator<? extends Component> iter = border.iterator();
-                       Component.IVisitor<Component> visitor = new 
FormModelUpdateVisitor(null);
-                       while (iter.hasNext())
-                       {
-                               Component child = iter.next();
-                               if (child instanceof IFormModelUpdateListener)
-                               {
-                                       visitor.component(child);
-                               }
-                       }
+                       FormComponent.visitComponentsPostOrder(border, new 
FormModelUpdateVisitor(null));
                }
        }
 

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.html?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.html
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,17 @@
+<html>
+    <head>
+        <title>Wicket Quickstart Archetype Homepage</title>
+    </head>
+    <body>
+        <strong>Wicket Quickstart Archetype Homepage</strong>
+        <br/><br/>
+        <span wicket:id="message">message will be here</span>
+
+               <div wicket:id="border">
+                       teste<br />
+                       <input wicket:id="textfield" /> - <span 
wicket:id="lbltextfield" /><br />
+                       <input wicket:id="datefield" /> - <span 
wicket:id="lbldatefield" /><br />
+            <span wicket:id="datefield2"></span> - <span 
wicket:id="lbldatefield2" /><br />
+               </div>
+    </body>
+</html>

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.java?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/HomePage.java
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,88 @@
+/*
+ * 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.wicket.markup.html.form.border;
+
+import org.apache.wicket.PageParameters;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.PropertyModel;
+
+/**
+ * Homepage
+ */
+public class HomePage extends WebPage
+{
+       private static final long serialVersionUID = 1L;
+
+       private String textfield;
+       private String datefield;
+       private String datefield2;
+
+       public String getTextfield()
+       {
+               return textfield;
+       }
+
+       public void setTextfield(String textfield)
+       {
+               this.textfield = textfield;
+       }
+
+       public String getDatefield()
+       {
+               return datefield;
+       }
+
+       public void setDatefield(String datefield)
+       {
+               this.datefield = datefield;
+       }
+
+       public String getDatefield2()
+       {
+               return datefield2;
+       }
+
+       public void setDatefield2(String datefield)
+       {
+               datefield2 = datefield;
+       }
+
+       /**
+        * Constructor that is invoked when page is invoked without a session.
+        * 
+        * @param parameters
+        *            Page parameters
+        */
+       public HomePage(final PageParameters parameters)
+       {
+               // Add the simplest type of label
+               add(new Label("message",
+                       "If you see this message wicket is properly configured 
and running"));
+
+               MyBorder border = new MyBorder("border");
+               add(border);
+
+               border.add(new TextField<String>("textfield", new 
PropertyModel<String>(this, "textfield")));
+               border.add(new Label("lbltextfield", new 
PropertyModel<String>(this, "textfield")));
+               border.add(new MyTextField("datefield", new 
PropertyModel<String>(this, "datefield")).setOutputMarkupId(true));
+               border.add(new Label("lbldatefield", new 
PropertyModel<String>(this, "datefield")));
+               border.add(new MyDateField("datefield2", new 
PropertyModel<String>(this, "datefield2")).setOutputMarkupId(true));
+               border.add(new Label("lbldatefield2", new 
PropertyModel<String>(this, "datefield2")));
+       }
+}

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.html?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.html
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html
+       xmlns="http://www.w3.org/1999/xhtml";
+       xmlns:wicket="http://wicket.apache.org/";
+>
+<head>
+</head>
+<body>
+<wicket:border>
+
+<form wicket:id="form">
+       <wicket:body />
+       <button wicket:id="submit" type="submit">submit</button>
+</form>
+
+</wicket:border>
+</body>
+</html>

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.java?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyBorder.java
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,48 @@
+/*
+ * 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.wicket.markup.html.form.border;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.border.Border;
+import org.apache.wicket.markup.html.form.Form;
+
+
+public class MyBorder extends Border
+{
+       private static final long serialVersionUID = 1L;
+
+       public MyBorder(String id)
+       {
+               super(id);
+
+               final Form<Void> form = new Form<Void>("form");
+               form.setOutputMarkupId(true);
+               add(form);
+
+               form.add(new AjaxSubmitLink("submit")
+               {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
+                       {
+                               target.addComponent(form);
+                       }
+               });
+       }
+}

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.html?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.html
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,21 @@
+<!--
+   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.
+-->
+<wicket:panel>
+  <span style="white-space: nowrap;">
+    <input type="text" wicket:id="date" size="8" />
+  </span>
+</wicket:panel>
\ No newline at end of file

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.java?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyDateField.java
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,122 @@
+/*
+ * 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.wicket.markup.html.form.border;
+
+import org.apache.wicket.markup.html.form.FormComponentPanel;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.PropertyModel;
+
+/**
+ * This is not a real DateField. It only servers some testing purposes 
(derived from
+ * FormComponentPanel)
+ */
+public class MyDateField extends FormComponentPanel<String>
+{
+       private static final long serialVersionUID = 1L;
+
+       private String date;
+
+       private final TextField<String> dateField;
+
+       /**
+        * Construct.
+        * 
+        * @param id
+        */
+       public MyDateField(String id)
+       {
+               this(id, null);
+       }
+
+       /**
+        * Construct.
+        * 
+        * @param id
+        * @param model
+        */
+       public MyDateField(String id, IModel<String> model)
+       {
+               super(id, model);
+               setType(String.class);
+               PropertyModel<String> dateFieldModel = new 
PropertyModel<String>(this, "date");
+               add(dateField = new TextField<String>("date", dateFieldModel));
+       }
+
+       /**
+        * Gets date.
+        * 
+        * @return date
+        */
+       public String getDate()
+       {
+               return date;
+       }
+
+       /**
+        * Sets date.
+        * 
+        * @param date
+        *            date
+        */
+       public void setDate(String date)
+       {
+               this.date = date;
+               setDefaultModelObject(date);
+       }
+
+       /**
+        * Sets the converted input. In this case, we're really just interested 
in the nested date
+        * field, as that is the element that receives the real user input. So 
we're just passing that
+        * on.
+        * <p>
+        * Note that overriding this method is a better option than overriding 
{...@link #updateModel()}
+        * like the first versions of this class did. The reason for that is 
that this method can be
+        * used by form validators without having to depend on the actual model 
being updated, and this
+        * method is called by the default implementation of {...@link 
#updateModel()} anyway (so we don't
+        * have to override that anymore).
+        * </p>
+        * 
+        * @see org.apache.wicket.markup.html.form.FormComponent#convertInput()
+        */
+       @Override
+       protected void convertInput()
+       {
+               setConvertedInput(dateField.getConvertedInput() + "-converted");
+       }
+
+       /**
+        * @see org.apache.wicket.Component#onBeforeRender()
+        */
+       @Override
+       protected void onBeforeRender()
+       {
+               dateField.setRequired(isRequired());
+
+               String d = (String)getDefaultModelObject();
+               if (d != null)
+               {
+                       date = d;
+               }
+               else
+               {
+                       date = null;
+               }
+
+               super.onBeforeRender();
+       }
+}

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyTextField.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyTextField.java?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyTextField.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/MyTextField.java
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,60 @@
+/*
+ * 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.wicket.markup.html.form.border;
+
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+
+/**
+ * 
+ */
+public class MyTextField extends TextField<String>
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        * @param id
+        */
+       public MyTextField(String id)
+       {
+               this(id, null);
+       }
+
+       /**
+        * Construct.
+        * 
+        * @param id
+        * @param model
+        */
+       public MyTextField(String id, IModel<String> model)
+       {
+               super(id, model);
+               setType(String.class);
+       }
+
+       /**
+        * 
+        * @see org.apache.wicket.markup.html.form.FormComponent#convertInput()
+        */
+       @Override
+       protected void convertInput()
+       {
+               super.setConvertedInput(getInput() + "-converted");
+       }
+}

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/TestHomePage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/TestHomePage.java?rev=735623&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/TestHomePage.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/form/border/TestHomePage.java
 Sun Jan 18 23:46:46 2009
@@ -0,0 +1,77 @@
+/*
+ * 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.wicket.markup.html.form.border;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * Simple test using the WicketTester
+ */
+public class TestHomePage extends TestCase
+{
+       private WicketTester tester;
+
+       private FormTester formTester;
+
+       @Override
+       public void setUp()
+       {
+               tester = new WicketTester();
+
+               // Start and render the test page
+               tester.startPage(HomePage.class);
+               tester.assertRenderedPage(HomePage.class);
+       }
+
+       /**
+        * 
+        */
+       public void testWithBorder2()
+       {
+               formTester = tester.newFormTester("border:form");
+
+               // formTester.setValue("..:textfield1", "testxxx");
+               TextField<String> textfield = 
(TextField<String>)tester.getLastRenderedPage().get(
+                       "border:textfield");
+               
tester.getServletRequest().setParameter(textfield.getInputName(), "abcde");
+
+               MyTextField datefield = 
(MyTextField)tester.getLastRenderedPage().get("border:datefield");
+               
tester.getServletRequest().setParameter(datefield.getInputName(), "aaabbb");
+
+               MyDateField datefield2 = 
(MyDateField)tester.getLastRenderedPage().get("border:datefield2");
+               TextField<String> date = 
(TextField<String>)datefield2.get("date");
+               tester.getServletRequest().setParameter(date.getInputName(), 
"abcdef");
+
+               formTester.submit();
+               tester.assertNoErrorMessage();
+
+               HomePage page = (HomePage)tester.getLastRenderedPage();
+               assertEquals("abcde", page.getTextfield());
+               assertEquals("aaabbb-converted", page.getDatefield());
+               assertEquals("abcdef-converted", page.getDatefield2());
+
+               assertEquals("abcde", 
page.get("border:lbltextfield").getDefaultModelObjectAsString());
+               assertEquals("aaabbb-converted", page.get("border:lbldatefield")
+                       .getDefaultModelObjectAsString());
+               assertEquals("abcdef-converted", 
page.get("border:lbldatefield2")
+                       .getDefaultModelObjectAsString());
+       }
+}


Reply via email to