Author: mgrigorov
Date: Sun Sep 19 14:49:07 2010
New Revision: 998677

URL: http://svn.apache.org/viewvc?rev=998677&view=rev
Log:
WICKET-3048 Redirect page in Ajax callback broken.

Pass a reference to the WebRequest when creating WebResponse.
1) wicket-examples > Dates were failing with "o.m.jetty.Request: STREAMING" 
while ServletWebRequest was trying to read the POST parameters via Request's 
_Reader_
2) Now ServletWebResponse can use the passed WebRequest to check whether this 
is Ajax request. No code duplication (#isAjax())


Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=998677&r1=998676&r2=998677&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
 Sun Sep 19 14:49:07 2010
@@ -373,14 +373,14 @@ public abstract class WebApplication ext
         * hide the details from the user. A appropriate WebRequest must be 
implemented and configured
         * to decode the encoded URL.
         * 
-        * @param httpServletRequest
+        * @param webRequest
         * @param httpServletResponse
         * @return a WebResponse object
         */
-       protected WebResponse newWebResponse(final HttpServletRequest 
httpServletRequest,
+       protected WebResponse newWebResponse(final WebRequest webRequest,
                final HttpServletResponse httpServletResponse)
        {
-               return new HeaderBufferingWebResponse(new 
ServletWebResponse(httpServletRequest,
+               return new HeaderBufferingWebResponse(new 
ServletWebResponse((ServletWebRequest)webRequest,
                        httpServletResponse));
        }
 

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java?rev=998677&r1=998676&r2=998677&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
 Sun Sep 19 14:49:07 2010
@@ -124,7 +124,7 @@ public class WicketFilter implements Fil
                                application.set();
 
                                WebRequest webRequest = 
application.newWebRequest(httpServletRequest, filterPath);
-                               WebResponse webResponse = 
application.newWebResponse(httpServletRequest,
+                               WebResponse webResponse = 
application.newWebResponse(webRequest,
                                        httpServletResponse);
 
                                RequestCycle requestCycle = 
application.createRequestCycle(webRequest, webResponse);

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java?rev=998677&r1=998676&r2=998677&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebRequest.java
 Sun Sep 19 14:49:07 2010
@@ -40,8 +40,8 @@ import org.apache.wicket.request.Url;
 import org.apache.wicket.request.Url.QueryParameter;
 import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.util.io.Streams;
-import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.util.string.PrependingStringBuffer;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.string.Strings;
@@ -372,22 +372,4 @@ public class ServletWebRequest extends W
                return RequestUtils.getCharset(httpServletRequest);
        }
 
-       @Override
-       public boolean isAjax()
-       {
-               return isAjax(httpServletRequest);
-       }
-
-       /**
-        * check if random http servlet request is an ajax request
-        *
-        * @param httpServletRequest web request
-        * @return <code>true</code> if ajax, <code>false</code> if regular 
request
-        */
-       public static boolean isAjax(HttpServletRequest httpServletRequest)
-       {
-               // TODO there is some redundancy in this method and 
WebRequest#isAjax - can this be eliminated?
-               return 
Strings.isTrue(httpServletRequest.getHeader(HEADER_AJAX)) ||
-                       
Strings.isTrue(httpServletRequest.getParameter(PARAM_AJAX));
-       }
 }

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java?rev=998677&r1=998676&r2=998677&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
 Sun Sep 19 14:49:07 2010
@@ -31,33 +31,32 @@ import org.apache.wicket.util.lang.Args;
 
 /**
  * WebResponse that wraps a {...@link ServletWebResponse}.
- *
+ * 
  * @author Matej Knopp
  */
 public class ServletWebResponse extends WebResponse
 {
        private final HttpServletResponse httpServletResponse;
-       private final HttpServletRequest httpServletRequest;
+       private final ServletWebRequest webRequest;
 
        /**
         * Construct.
-        *
+        * 
         * @param httpServletRequest
         * @param httpServletResponse
         */
-       public ServletWebResponse(HttpServletRequest httpServletRequest,
-               HttpServletResponse httpServletResponse)
+       public ServletWebResponse(ServletWebRequest webRequest, 
HttpServletResponse httpServletResponse)
        {
-               Args.notNull(httpServletRequest, "httpServletRequest");
+               Args.notNull(webRequest, "webRequest");
                Args.notNull(httpServletResponse, "httpServletResponse");
 
                this.httpServletResponse = httpServletResponse;
-               this.httpServletRequest = httpServletRequest;
+               this.webRequest = webRequest;
        }
 
        /**
         * Returns the wrapped response
-        *
+        * 
         * @return wrapped response
         */
        public final HttpServletResponse getHttpServletResponse()
@@ -188,6 +187,8 @@ public class ServletWebResponse extends 
 
        private String getAbsolutePrefix()
        {
+               HttpServletRequest httpServletRequest = 
webRequest.getHttpServletRequest();
+
                String port = "";
                if (("http".equals(httpServletRequest.getScheme()) && 
httpServletRequest.getServerPort() != 80) ||
                        ("https".equals(httpServletRequest.getScheme()) && 
httpServletRequest.getServerPort() != 443))
@@ -209,6 +210,7 @@ public class ServletWebResponse extends 
                }
                else
                {
+                       HttpServletRequest httpServletRequest = 
webRequest.getHttpServletRequest();
                        Charset charset = 
RequestUtils.getCharset(httpServletRequest);
                        Url current = 
Url.parse(httpServletRequest.getRequestURI(), charset);
                        Url append = Url.parse(url, charset);
@@ -230,23 +232,23 @@ public class ServletWebResponse extends 
                        url = httpServletResponse.encodeRedirectURL(url);
 
                        // wicket redirects should never be cached
-                       this.disableCaching();
+                       disableCaching();
 
-                       if (ServletWebRequest.isAjax(httpServletRequest))
+                       if (webRequest.isAjax())
                        {
                                httpServletResponse.addHeader("Ajax-Location", 
url);
 
                                /*
-                                * usually the Ajax-Location header is enough 
and we do not need to the
-                                * redirect url into the response, but 
sometimes the response is processed
-                                * via an iframe (eg using multipart ajax 
handling) and the headers are not
-                                * available because XHR is not used and that 
is the only way javascript has
-                                * access to response headers.
+                                * usually the Ajax-Location header is enough 
and we do not need to the redirect url
+                                * into the response, but sometimes the 
response is processed via an iframe (eg
+                                * using multipart ajax handling) and the 
headers are not available because XHR is
+                                * not used and that is the only way javascript 
has access to response headers.
                                 */
                                httpServletResponse.getWriter().write(
                                        "<ajax-response><redirect>" + url + 
"</redirect></ajax-response>");
 
-                               setContentType("text/xml;charset=" + 
httpServletRequest.getCharacterEncoding());
+                               setContentType("text/xml;charset=" +
+                                       
webRequest.getHttpServletRequest().getCharacterEncoding());
                        }
                        else
                        {

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=998677&r1=998676&r2=998677&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 Sun Sep 19 14:49:07 2010
@@ -303,8 +303,9 @@ public class BaseWicketTester
                request.setURL(request.getContextPath() + 
request.getServletPath() + "/");
                response = new MockHttpServletResponse(request);
 
-               requestCycle = 
application.createRequestCycle(createServletWebRequest(),
-                       createServletWebResponse());
+               ServletWebRequest servletWebRequest = createServletWebRequest();
+               requestCycle = application.createRequestCycle(servletWebRequest,
+                       createServletWebResponse(servletWebRequest));
                requestCycle.setCleanupFeedbackMessagesOnDetach(false);
                ThreadContext.setRequestCycle(requestCycle);
 
@@ -317,9 +318,9 @@ public class BaseWicketTester
        /**
         * @return
         */
-       private ServletWebResponse createServletWebResponse()
+       private ServletWebResponse createServletWebResponse(ServletWebRequest 
servletWebRequest)
        {
-               return new ServletWebResponse(request, response)
+               return new ServletWebResponse(servletWebRequest, response)
                {
                        @Override
                        public void sendRedirect(String url)


Reply via email to