Updated Branches: refs/heads/master c333ac07b -> ecdfc1244
WICKET-5484 rendering and writing of a page should never happen on an Ajax request, even if other circumstances imply otherwise Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ecdfc124 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ecdfc124 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ecdfc124 Branch: refs/heads/master Commit: ecdfc124453ca614178d33d0c119d4e71872cfef Parents: c333ac0 Author: svenmeier <[email protected]> Authored: Thu Jan 23 14:30:01 2014 +0100 Committer: svenmeier <[email protected]> Committed: Thu Jan 23 14:30:01 2014 +0100 ---------------------------------------------------------------------- .../request/handler/render/WebPageRenderer.java | 10 ++- .../handler/render/WebPageRendererTest.java | 75 ++++++++++++++++---- 2 files changed, 69 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/ecdfc124/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java index 4b95e32..8c99c13 100644 --- a/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java +++ b/wicket-core/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java @@ -332,10 +332,16 @@ public class WebPageRenderer extends PageRenderer protected boolean shouldRenderPageAndWriteResponse(RequestCycle cycle, Url currentUrl, Url targetUrl) { + // WICKET-5484 never render and write for Ajax requests + if (isAjax(cycle)) + { + return false; + } + return neverRedirect(getRedirectPolicy()) - || (!isAjax(cycle) && ((isOnePassRender() && notForcedRedirect(getRedirectPolicy())) || (targetUrl + || ((isOnePassRender() && notForcedRedirect(getRedirectPolicy())) || (targetUrl .equals(currentUrl) && notNewAndNotStatelessPage(isNewPageInstance(), - isPageStateless())))) || (targetUrl.equals(currentUrl) && isRedirectToRender()) + isPageStateless()))) || (targetUrl.equals(currentUrl) && isRedirectToRender()) || shouldPreserveClientUrl(cycle); } http://git-wip-us.apache.org/repos/asf/wicket/blob/ecdfc124/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java b/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java index 3da8089..4f6ff45 100644 --- a/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/request/handler/render/WebPageRendererTest.java @@ -574,7 +574,7 @@ public class WebPageRendererTest // if // the policy is never to redirect renderer.redirectPolicy = RedirectPolicy.NEVER_REDIRECT; - renderer.ajax = true; + renderer.ajax = false; renderer.onePassRender = true; renderer.redirectToRender = true; renderer.shouldPreserveClientUrl = true; @@ -635,7 +635,7 @@ public class WebPageRendererTest renderer.shouldPreserveClientUrl = true; renderer.redirectPolicy = RedirectPolicy.AUTO_REDIRECT; - renderer.ajax = true; + renderer.ajax = false; renderer.onePassRender = false; renderer.redirectToRender = false; renderer.newPageInstance = true; @@ -698,26 +698,26 @@ public class WebPageRendererTest " XXXXXXXXXXXX" + " X XXXXXXXX" + " XXXXXXXXXXXX" + - " XXXXXXXX" + - " XXXXXXXXXXXX" + - " XXXXXXXX" + - " XXXXXXXXXXXX" + - "XXXXXXXXXXXXXXXX" + - "XXXXXXXXXXXXXXXX" + - "XXXXXXXXXXXXXXXX" + - "XXXXXXXXXXXXXXXX" + + " " + + " " + + " " + + " " + "XXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXX" + + " " + + " " + + " " + + " " + " X XXXXXXXX" + " XXXXXXXXXXXX" + "XXXXXXXXXXXXXXXX" + "XXXXXXXXXXXXXXXX" + - " XXXXXXXX" + - " XXXXXXXXXXXX" + - " XXXXXXXX" + - " XXXXXXXXXXXX"; + " " + + " " + + " " + + " "; checkVariations(match,new ShouldRenderPageAndWriteResponseVariations()); } @@ -956,4 +956,51 @@ public class WebPageRendererTest verify(response).sendRedirect(anyString()); Assert.assertTrue(stored.get()); } + + /** + * Tests that when {@link WebRequest#shouldPreserveClientUrl()} returns {@code true} and the + * current request is Ajax then a redirect should be issued + */ + @Test + public void testShouldPreserveClientUrlAndAjaxRequest() + { + TestPageRenderer renderer = new TestPageRenderer(handler); + renderer.ajax = true; + renderer.newPageInstance = true; + + when(urlRenderer.getBaseUrl()).thenReturn(Url.parse("base")); + + when(requestCycle.mapUrlFor(eq(handler))).thenReturn(Url.parse("base/a")); + + when(request.shouldPreserveClientUrl()).thenReturn(true); + + renderer.respond(requestCycle); + + verify(response).sendRedirect(anyString()); + verify(response, never()).write(any(byte[].class)); + + } + + /** + * Tests that when {@link RedirectPolicy#NEVER_REDIRECT} is configured but the current request + * is Ajax then a redirect should still be issued + */ + @Test + public void testNeverRedirectButAjaxRequest() + { + TestPageRenderer renderer = new TestPageRenderer(handler); + renderer.redirectPolicy = RedirectPolicy.NEVER_REDIRECT; + renderer.ajax = true; + renderer.newPageInstance = true; + + when(urlRenderer.getBaseUrl()).thenReturn(Url.parse("base")); + + when(requestCycle.mapUrlFor(eq(handler))).thenReturn(Url.parse("base/a")); + + renderer.respond(requestCycle); + + verify(response).sendRedirect(anyString()); + verify(response, never()).write(any(byte[].class)); + + } }
