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)
{