Author: pedro
Date: Mon Jul  4 21:03:22 2011
New Revision: 1142806

URL: http://svn.apache.org/viewvc?rev=1142806&view=rev
Log:
- moving the spread logic preventing page from get dirty in an AJAX request to 
Page
- test case for this logic
Issue: WICKET-3819

Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java?rev=1142806&r1=1142805&r2=1142806&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java 
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java Mon Jul  
4 21:03:22 2011
@@ -309,7 +309,7 @@ public abstract class Page extends Marku
         * @param isInitialization
         *            a flag whether this is a page instantiation
         */
-       public final void dirty(final boolean isInitialization)
+       public void dirty(final boolean isInitialization)
        {
                checkHierarchyChange(this);
 

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java?rev=1142806&r1=1142805&r2=1142806&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/RequestListenerInterface.java
 Mon Jul  4 21:03:22 2011
@@ -25,11 +25,9 @@ import java.util.Map;
 
 import org.apache.wicket.authorization.AuthorizationException;
 import org.apache.wicket.behavior.Behavior;
-import org.apache.wicket.request.Request;
 import org.apache.wicket.request.RequestHandlerStack.ReplaceHandlerException;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.handler.ListenerInvocationNotAllowedException;
-import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.util.lang.Classes;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -251,12 +249,6 @@ public class RequestListenerInterface
                // during the invocation of the listener and thus lose its 
parent
                Page page = component.getPage();
 
-               if (isAjax(component))
-               {
-                       // do not increment page id for ajax requests
-                       frozen = page.setFreezePageId(true);
-               }
-
                // initialization is required for stateless pages
                if (!page.isInitialized())
                {
@@ -294,21 +286,6 @@ public class RequestListenerInterface
                }
        }
 
-       private boolean isAjax(Component component)
-       {
-               boolean isAjax = false;
-
-               Request request = component.getRequest();
-               if (request instanceof WebRequest)
-               {
-                       WebRequest webRequest = (WebRequest)request;
-                       isAjax = webRequest.isAjax();
-               }
-
-               return isAjax;
-       }
-
-
        /**
         * Method to call to register this interface for use
         */

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=1142806&r1=1142805&r2=1142806&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
 Mon Jul  4 21:03:22 2011
@@ -592,60 +592,50 @@ public class AjaxRequestTarget implement
         */
        public final void respond(final IRequestCycle requestCycle)
        {
-               // do not increment page id during ajax processing
-               boolean frozen = page.setFreezePageId(true);
+               final RequestCycle rc = (RequestCycle)requestCycle;
+               final WebResponse response = 
(WebResponse)requestCycle.getResponse();
 
-               try
+               if (markupIdToComponent.values().contains(page))
                {
-                       final RequestCycle rc = (RequestCycle)requestCycle;
-                       final WebResponse response = 
(WebResponse)requestCycle.getResponse();
-
-                       if (markupIdToComponent.values().contains(page))
-                       {
-                               // the page itself has been added to the 
request target, we simply issue a redirect
-                               // back to the page
-                               IRequestHandler handler = new 
RenderPageRequestHandler(new PageProvider(page));
-                               final String url = 
rc.urlFor(handler).toString();
-                               response.sendRedirect(url);
-                               return;
-                       }
+                       // the page itself has been added to the request 
target, we simply issue a redirect
+                       // back to the page
+                       IRequestHandler handler = new 
RenderPageRequestHandler(new PageProvider(page));
+                       final String url = rc.urlFor(handler).toString();
+                       response.sendRedirect(url);
+                       return;
+               }
 
-                       respondersFrozen = true;
+               respondersFrozen = true;
 
-                       for (ITargetRespondListener listener : respondListeners)
-                       {
-                               listener.onTargetRespond(this);
-                       }
+               for (ITargetRespondListener listener : respondListeners)
+               {
+                       listener.onTargetRespond(this);
+               }
 
-                       final Application app = Application.get();
+               final Application app = Application.get();
 
-                       page.send(app, Broadcast.BREADTH, this);
+               page.send(app, Broadcast.BREADTH, this);
 
-                       // Determine encoding
-                       final String encoding = 
app.getRequestCycleSettings().getResponseRequestEncoding();
+               // Determine encoding
+               final String encoding = 
app.getRequestCycleSettings().getResponseRequestEncoding();
 
-                       // Set content type based on markup type for page
-                       response.setContentType("text/xml; charset=" + 
encoding);
+               // Set content type based on markup type for page
+               response.setContentType("text/xml; charset=" + encoding);
 
-                       // Make sure it is not cached by a client
-                       response.disableCaching();
+               // Make sure it is not cached by a client
+               response.disableCaching();
 
-                       try
-                       {
-                               final StringResponse bodyResponse = new 
StringResponse();
-                               constructResponseBody(bodyResponse, encoding);
-                               CharSequence filteredResponse = 
invokeResponseFilters(bodyResponse);
-                               response.write(filteredResponse);
-                       }
-                       finally
-                       {
-                               // restore the original response
-                               RequestCycle.get().setResponse(response);
-                       }
+               try
+               {
+                       final StringResponse bodyResponse = new 
StringResponse();
+                       constructResponseBody(bodyResponse, encoding);
+                       CharSequence filteredResponse = 
invokeResponseFilters(bodyResponse);
+                       response.write(filteredResponse);
                }
                finally
                {
-                       page.setFreezePageId(frozen);
+                       // restore the original response
+                       RequestCycle.get().setResponse(response);
                }
        }
 

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java?rev=1142806&r1=1142805&r2=1142806&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/WebPage.java
 Mon Jul  4 21:03:22 2011
@@ -26,9 +26,11 @@ import org.apache.wicket.markup.renderSt
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.handler.IPageRequestHandler;
+import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.response.StringResponse;
@@ -306,4 +308,17 @@ public class WebPage extends Page
                return new BookmarkablePageLink<Void>(id, 
getApplication().getHomePage());
        }
 
+       /**
+        * Prevents page from get dirt inside an AJAX request.
+        */
+       @Override
+       public final void dirty(boolean isInitialization)
+       {
+               Request request = getRequest();
+               if (request instanceof WebRequest && 
((WebRequest)request).isAjax())
+               {
+                       return;
+               }
+               super.dirty(isInitialization);
+       }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java?rev=1142806&r1=1142805&r2=1142806&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/handler/PageIdPoliticTest.java
 Mon Jul  4 21:03:22 2011
@@ -56,18 +56,29 @@ public class PageIdPoliticTest extends T
         * 
         * @see <a 
href="https://issues.apache.org/jira/browse/WICKET-3667";>WICKET-3667</a>
         */
-       public void testPageNotTouchedInAjaxRequest()
+       public void testPageGetsTouchedInAjaxRequest()
        {
                TestPage testPage = new TestPage();
-               Url ajaxUrl = 
Url.parse(testPage.eventBehavior.getCallbackUrl().toString(),
-                       
Charset.forName(tester.getRequest().getCharacterEncoding()));
                tester.startPage(TestPage.class);
                int referenceStoreCount = storeCount;
-               tester.executeAjaxUrl(ajaxUrl);
+               
tester.executeAjaxUrl(testPage.getAjaxUrl(tester.getRequest().getCharacterEncoding()));
                // the page should be stored even for ajax requests
                assertEquals(referenceStoreCount + 1, storeCount);
        }
 
+       /**
+        * 
+        */
+       public void testPageIdDontGetIncreasedInAjaxRequest()
+       {
+               TestPage testPage = new TestPage();
+               tester.startPage(testPage);
+               String testPageId = testPage.getId();
+               
tester.executeAjaxUrl(testPage.getAjaxUrl(tester.getRequest().getCharacterEncoding()));
+               assertEquals(testPageId, testPage.getId());
+               assertTrue(testPage.ajaxCallbackExecuted);
+       }
+
        @Override
        protected void setUp() throws Exception
        {
@@ -112,6 +123,7 @@ public class PageIdPoliticTest extends T
                /** */
                private static final long serialVersionUID = 1L;
                AjaxEventBehavior eventBehavior;
+               boolean ajaxCallbackExecuted;
 
                /**
                 * Construct.
@@ -128,11 +140,21 @@ public class PageIdPoliticTest extends T
                                @Override
                                protected void onEvent(AjaxRequestTarget target)
                                {
+                                       ajaxCallbackExecuted = true;
                                }
                        });
                        add(component);
                }
 
+               /**
+                * @param encoding
+                * @return ajaxUrl
+                */
+               public Url getAjaxUrl(String encoding)
+               {
+                       return 
Url.parse(eventBehavior.getCallbackUrl().toString(), Charset.forName(encoding));
+               }
+
                public IResourceStream getMarkupResourceStream(MarkupContainer 
container,
                        Class<?> containerClass)
                {


Reply via email to