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)