Author: jdonnerstag
Date: Sun Feb 22 13:14:28 2009
New Revision: 746670

URL: http://svn.apache.org/viewvc?rev=746670&view=rev
Log:
fixed WICKET-2114: execute ajax behavior fails if Button is used to submit form.

Added:
    wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.html
    wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.java
Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/DomReadyOrderTest.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/TestErrorPage.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseExceptionsTest.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java?rev=746670&r1=746669&r2=746670&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java Sun 
Feb 22 13:14:28 2009
@@ -538,7 +538,10 @@
                checkReuse();
 
                // set it as the current target, on the top of the stack
-               requestTargets.push(target);
+               if (target != null)
+               {
+                       requestTargets.push(target);
+               }
 
                // set start step
                currentStep = PROCESS_EVENTS;

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=746670&r1=746669&r2=746670&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 Sun Feb 22 13:14:28 2009
@@ -42,6 +42,7 @@
 import org.apache.wicket.feedback.FeedbackMessages;
 import org.apache.wicket.feedback.IFeedbackMessageFilter;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.CheckGroup;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.FormComponent;
@@ -738,8 +739,7 @@
                        String failMessage = "No form submit behavior found on 
the submit link. Strange!!";
                        notNull(failMessage, ajaxFormSubmitBehavior);
 
-                       setupRequestAndResponse(true);
-                       WebRequestCycle requestCycle = createRequestCycle();
+                       WebRequestCycle requestCycle = 
setupRequestAndResponse(true);
 
                        submitAjaxFormSubmitBehavior(ajaxFormSubmitBehavior);
 
@@ -1136,7 +1136,6 @@
                        if (behavior instanceof AjaxEventBehavior)
                        {
                                AjaxEventBehavior tmp = 
(AjaxEventBehavior)behavior;
-
                                if (event.equals(tmp.getEvent()))
                                {
                                        ajaxEventBehavior = tmp;
@@ -1149,10 +1148,10 @@
                failMessage = "No AjaxEventBehavior found on component: " + 
component.getId() +
                        " which matches the event: " + event;
                notNull(failMessage, ajaxEventBehavior);
-               WebRequestCycle requestCycle = resolveRequestCycle();
 
-               // when the requestcycle is not created via 
setupRequestAndResponse(true), it can happen
-               // that the request is not an ajax request -> we have to set 
the header manually
+               // when the requestcycle is not created via 
setupRequestAndResponse(true), than create a new
+               // one
+               WebRequestCycle requestCycle = resolveRequestCycle();
                if (!requestCycle.getWebRequest().isAjax())
                {
                        throw new IllegalStateException(
@@ -1166,6 +1165,7 @@
                        submitAjaxFormSubmitBehavior(ajaxFormSubmitBehavior);
                }
 
+               // process the event
                ajaxEventBehavior.onRequest();
 
                // process the request target
@@ -1174,7 +1174,7 @@
 
        /**
         * 
-        * @return
+        * @return WebRequestCycle
         */
        protected WebRequestCycle resolveRequestCycle()
        {
@@ -1273,17 +1273,15 @@
                        {
                                if (formComponent.isVisible())
                                {
-                                       // !(formComponent instanceof Button) &&
                                        if (!(formComponent instanceof 
RadioGroup) &&
-                                               !(formComponent instanceof 
CheckGroup))
+                                               !(formComponent instanceof 
CheckGroup) &&
+                                               
!(formComponent.getClass().isAssignableFrom(Button.class)))
                                        {
                                                String name = 
formComponent.getInputName();
                                                String value = 
formComponent.getValue();
 
-                                               // Set request parameter with 
the field value, but do not
-                                               // modify an existing
-                                               // request parameter explicitly 
set using
-                                               // FormTester.setValue()
+                                               // Set request parameter with 
the field value, but do not modify an existing
+                                               // request parameter explicitly 
set using FormTester.setValue()
                                                if 
(getServletRequest().getParameterMap().get(name) == null)
                                                {
                                                        
getServletRequest().setParameter(name, value);

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java?rev=746670&r1=746669&r2=746670&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
 Sun Feb 22 13:14:28 2009
@@ -544,7 +544,6 @@
        public void assertResultPage(final Class<?> clazz, final String 
filename) throws Exception
        {
                String document = getServletResponse().getDocument();
-               setupRequestAndResponse();
                DiffUtil.validatePage(document, clazz, filename, true);
        }
 

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/DomReadyOrderTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/DomReadyOrderTest.java?rev=746670&r1=746669&r2=746670&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/DomReadyOrderTest.java 
(original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/DomReadyOrderTest.java 
Sun Feb 22 13:14:28 2009
@@ -17,12 +17,17 @@
 package org.apache.wicket.ajax;
 
 import org.apache.wicket.WicketTestCase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @author jcompagner
  */
 public class DomReadyOrderTest extends WicketTestCase
 {
+       /** log. */
+       private static final Logger log = 
LoggerFactory.getLogger(DomReadyOrderTest.class);
+
        /**
         * @throws Exception
         */
@@ -31,7 +36,49 @@
                tester.processRequestCycle(DomReadyOrderPage.class);
                tester.assertResultPage(DomReadyOrderPage.class, 
"DomReadyOrderPage_expected.html");
 
+               tester.clickLink("test", true);
+               tester.assertResultPage(DomReadyOrderPage.class, 
"DomReadyOrderPage_ajax_expected.html");
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testDomReadyOrder2() throws Exception
+       {
+               tester.processRequestCycle(DomReadyOrderPage.class);
+               tester.assertResultPage(DomReadyOrderPage.class, 
"DomReadyOrderPage_expected.html");
+
                tester.executeAjaxEvent("test", "onclick");
                tester.assertResultPage(DomReadyOrderPage.class, 
"DomReadyOrderPage_ajax_expected.html");
        }
+
+       /**
+        * 
+        */
+       public void testAjaxSubmitWhileAnotherButtonIsNotVisible()
+       {
+               // start and render the test page
+               tester.startPage(HomePage.class);
+               // assert rendered page class
+               tester.assertRenderedPage(HomePage.class);
+               // assert rendered label component
+               tester.assertLabel("message",
+                       "If you see this message wicket is properly configured 
and running");
+
+               // assert rendered row element
+               tester.assertLabel("form:listViewContainer:listView:0:label", 
"0");
+
+               // add a row, execute ajax
+               tester.executeAjaxEvent("form:addButton", "onclick");
+
+               // assert rendered page class
+               tester.assertRenderedPage(HomePage.class);
+
+               String doc = tester.getServletResponse().getDocument();
+               log.error("'" + doc + "'");
+
+               // assert rendered row elements
+               tester.assertLabel("form:listViewContainer:listView:0:label", 
"0");
+               tester.assertLabel("form:listViewContainer:listView:1:label", 
"1");
+       }
 }

Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.html?rev=746670&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.html 
(added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.html Sun 
Feb 22 13:14:28 2009
@@ -0,0 +1,26 @@
+<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>
+        
+        <form wicket:id="form">
+          <input wicket:id="textfield"/>
+          <input type="submit" wicket:id="submit"/>
+
+        <div wicket:id="listViewContainer">
+          <wicket:container wicket:id="listView">
+             <label wicket:id="label"/><br/>
+          </wicket:container>
+        </div>
+
+        <a href="#" wicket:id="addButton">Click me to add a row</a>
+
+        </form>
+        
+    </body>
+</html>
+

Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.java?rev=746670&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.java 
(added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/ajax/HomePage.java Sun 
Feb 22 13:14:28 2009
@@ -0,0 +1,115 @@
+/*
+ * 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.ajax;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.Model;
+
+/**
+ * Homepage
+ */
+public class HomePage extends WebPage
+{
+       private static final long serialVersionUID = 1L;
+
+       int rows = 1;
+
+       /**
+        */
+       public HomePage()
+       {
+               this(true, 0);
+       }
+
+       /**
+        * @param enableInputField
+        * @param newPageId
+        */
+       @SuppressWarnings("serial")
+       public HomePage(boolean enableInputField, int newPageId)
+       {
+               // Add the simplest type of label
+               add(new Label("message",
+                       "If you see this message wicket is properly configured 
and running"));
+
+               Form<Void> form = new Form<Void>("form")
+               {
+                       @Override
+                       protected void onSubmit()
+                       {
+                               if (!continueToOriginalDestination())
+                               {
+                                       setResponsePage(HomePage.class);
+                               }
+                       }
+               };
+               add(form);
+               form.add(new TextField<String>("textfield", new 
Model<String>()));
+               form.add(new Button("submit"));
+
+               final WebMarkupContainer listViewContainer = new 
WebMarkupContainer("listViewContainer");
+               form.add(listViewContainer);
+               listViewContainer.setOutputMarkupId(true);
+
+               final ListView<Object> listView;
+               listViewContainer.add(listView = new 
ListView<Object>("listView",
+                       new AbstractReadOnlyModel<List<Object>>()
+                       {
+                               @Override
+                               public List<Object> getObject()
+                               {
+                                       List<Object> objects = new 
LinkedList<Object>();
+                                       for (int i = 0; i < rows; i++)
+                                       {
+                                               objects.add(new Object());
+                                       }
+
+                                       return objects;
+                               }
+                       })
+               {
+                       @Override
+                       protected void populateItem(ListItem<Object> item)
+                       {
+                               item.add(new Label("label", 
Integer.toString(item.getIndex())));
+                       }
+               });
+
+               form.add(new AjaxFallbackButton("addButton", form)
+               {
+                       @Override
+                       protected void onSubmit(AjaxRequestTarget target, 
Form<?> form)
+                       {
+                               rows++;
+                               listView.removeAll();
+                               target.addComponent(listViewContainer);
+                       }
+               }.setDefaultFormProcessing(false));
+       }
+}

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/TestErrorPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/TestErrorPage.java?rev=746670&r1=746669&r2=746670&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/TestErrorPage.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/TestErrorPage.java
 Sun Feb 22 13:14:28 2009
@@ -34,8 +34,7 @@
         */
        public TestErrorPage()
        {
-
-               add(new AjaxLink("link")
+               add(new AjaxLink<String>("link")
                {
                        private static final long serialVersionUID = 1L;
 
@@ -57,5 +56,4 @@
                        }
                });
        }
-
 }

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseExceptionsTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseExceptionsTest.java?rev=746670&r1=746669&r2=746670&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseExceptionsTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseExceptionsTest.java
 Sun Feb 22 13:14:28 2009
@@ -114,7 +114,6 @@
                }
 
                tester.startPage(TestErrorPage.class);
-               link = 
(AjaxLink)tester.getComponentFromLastRenderedPage("link");
 
                try
                {


Reply via email to