Author: mgrigorov Date: Thu Jul 28 08:17:10 2011 New Revision: 1151757 URL: http://svn.apache.org/viewvc?rev=1151757&view=rev Log: WICKET-3921 No HTTP response cache headers are set in Wicket Ajax redirects
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestTargetTest.java Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java?rev=1151757&r1=1151756&r2=1151757&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java Thu Jul 28 08:17:10 2011 @@ -261,6 +261,7 @@ public class ServletWebResponse extends setContentType("text/xml;charset=" + webRequest.getContainerRequest().getCharacterEncoding()); + disableCaching(); } else { Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestTargetTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestTargetTest.java?rev=1151757&r1=1151756&r2=1151757&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestTargetTest.java (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/ajax/AjaxRequestTargetTest.java Thu Jul 28 08:17:10 2011 @@ -23,12 +23,18 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.wicket.Component; +import org.apache.wicket.MarkupContainer; import org.apache.wicket.MockPageWithLinkAndComponent; import org.apache.wicket.WicketTestCase; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.event.IEvent; +import org.apache.wicket.markup.IMarkupResourceStreamProvider; import org.apache.wicket.markup.html.WebComponent; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.util.resource.IResourceStream; +import org.apache.wicket.util.resource.StringResourceStream; import org.apache.wicket.util.tester.DiffUtil; +import org.apache.wicket.util.time.Time; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,7 +46,7 @@ import org.slf4j.LoggerFactory; public class AjaxRequestTargetTest extends WicketTestCase { private static final Logger log = LoggerFactory.getLogger(AjaxRequestTargetTest.class); - + /** * Test that a normal <style> header contribution is added correctly. * @@ -221,6 +227,71 @@ public class AjaxRequestTargetTest exten assertTrue(listener.onAfterRespondExecuted); } + /** + * https://issues.apache.org/jira/browse/WICKET-3921 + */ + public void testAjaxRedirectSetsNoCachingHeaders() + { + tester.startPage(new Wicket3921()); + + tester.clickLink("updatePage"); + assertEquals(Time.START_OF_UNIX_TIME.toRfc1123TimestampString(), tester.getLastResponse() + .getHeader("Expires")); + assertEquals("no-cache", tester.getLastResponse().getHeader("Pragma")); + assertEquals("no-cache, no-store", tester.getLastResponse().getHeader("Cache-Control")); + + + tester.clickLink("updateComponent"); + assertEquals(Time.START_OF_UNIX_TIME.toRfc1123TimestampString(), tester.getLastResponse() + .getHeader("Expires")); + assertEquals("no-cache", tester.getLastResponse().getHeader("Pragma")); + assertEquals("no-cache, no-store", tester.getLastResponse().getHeader("Cache-Control")); + } + + /** + * Test page for {@linkplain AjaxRequestTargetTest#testAjaxRedirectSetsNoCachingHeaders()} + */ + private static class Wicket3921 extends WebPage implements IMarkupResourceStreamProvider + { + + /** + * Construct. + */ + private Wicket3921() + { + setOutputMarkupId(true); + + add(new AjaxLink<Void>("updatePage") + { + @Override + public void onClick(AjaxRequestTarget target) + { + // adding the page to the target will produce a wicket ajax redirect + // without any cache headers + target.add(getPage()); + } + }); + + add(new AjaxLink<Void>("updateComponent") + { + @Override + public void onClick(AjaxRequestTarget target) + { + // this produces an ajax response with cache headers set properly + target.add(this); + } + }.setOutputMarkupId(true)); + + } + + public IResourceStream getMarkupResourceStream(MarkupContainer container, + Class<?> containerClass) + { + return new StringResourceStream( + "<html><body><a wicket:id='updatePage'>link1</a><br/><br/><br/><a wicket:id='updateComponent'>Link2</a></body></html>"); + } + } + private static class ValidatingAjaxRequestTargetListener implements AjaxRequestTarget.IListener { boolean onBeforeRespondExecuted = false;