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;


Reply via email to