Author: mgrigorov
Date: Sat Dec 11 09:15:52 2010
New Revision: 1044601

URL: http://svn.apache.org/viewvc?rev=1044601&view=rev
Log:
WICKET-3239 for stateless pages wicket complains with "The Buffered response 
should be handled by BufferedResponseRequestHandler"

Fix "redirect after post" support for stateless pages.
Since there is no bound session we need to use a fake and stable session id 
(IManageablePage#STATELESS_SESSION_ID)

Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/page/IManageablePage.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/page/IManageablePage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/page/IManageablePage.java?rev=1044601&r1=1044600&r2=1044601&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/page/IManageablePage.java 
(original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/page/IManageablePage.java 
Sat Dec 11 09:15:52 2010
@@ -22,6 +22,11 @@ import org.apache.wicket.IClusterable;
 public interface IManageablePage extends IClusterable
 {
        /**
+        * A prefix used as session id replacement for stored responses for 
stateless pages
+        */
+       String STATELESS_SESSION_ID = "stateless-";
+
+       /**
         * Gets whether the page is stateless. Components on stateless page 
must not render any stateful
         * urls. Stateful urls are urls, which refer to a certain (current) 
page instance and don't
         * contain enough information to reconstruct page if it's not available 
(page class).
@@ -61,7 +66,7 @@ public interface IManageablePage extends
         * solving the problem.
         * 
         * @param freeze
-        *
+        * 
         * @return previous state
         */
        boolean setFreezePageId(boolean freeze);

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java?rev=1044601&r1=1044600&r2=1044601&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
 Sat Dec 11 09:15:52 2010
@@ -18,6 +18,7 @@ package org.apache.wicket.request.handle
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Session;
+import org.apache.wicket.page.IManageablePage;
 import org.apache.wicket.protocol.http.BufferedWebResponse;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.IRequestHandler;
@@ -39,7 +40,7 @@ import org.slf4j.LoggerFactory;
  */
 public class WebPageRenderer extends PageRenderer
 {
-       private static Logger logger = 
LoggerFactory.getLogger(WebPageRenderer.class);
+       private static final Logger logger = 
LoggerFactory.getLogger(WebPageRenderer.class);
 
        /**
         * Construct.
@@ -81,7 +82,12 @@ public class WebPageRenderer extends Pag
 
        private String getSessionId()
        {
-               return Session.get().getId();
+               String sessionId = Session.get().getId();
+               if (sessionId == null)
+               {
+                       sessionId = IManageablePage.STATELESS_SESSION_ID;
+               }
+               return sessionId;
        }
 
        private boolean isSessionTemporary()
@@ -284,7 +290,6 @@ public class WebPageRenderer extends Pag
         */
        protected boolean enableRedirectForStatelessPage()
        {
-               // TODO Make sure this is a sane default value (if not make it 
configurable)
                return true;
        }
 }

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java?rev=1044601&r1=1044600&r2=1044601&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/mapper/BufferedResponseMapper.java
 Sat Dec 11 09:15:52 2010
@@ -17,6 +17,7 @@
 package org.apache.wicket.request.mapper;
 
 import org.apache.wicket.Session;
+import org.apache.wicket.page.IManageablePage;
 import org.apache.wicket.protocol.http.BufferedWebResponse;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.IRequestHandler;
@@ -46,21 +47,18 @@ public class BufferedResponseMapper impl
         */
        protected String getSessionId()
        {
-               return Session.get().getId();
+               String sessionId = Session.get().getId();
+               if (sessionId == null)
+               {
+                       sessionId = IManageablePage.STATELESS_SESSION_ID;
+               }
+               return sessionId;
        }
 
 
        protected boolean hasBufferedResponse(Url url)
        {
-               String sessionId = getSessionId();
-               if (sessionId != null)
-               {
-                       return 
WebApplication.get().hasBufferedResponse(sessionId, url);
-               }
-               else
-               {
-                       return false;
-               }
+               return WebApplication.get().hasBufferedResponse(getSessionId(), 
url);
        }
 
        protected BufferedWebResponse getAndRemoveBufferedResponse(Url url)


Reply via email to