You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2010/09/19 16:49:07 UTC
svn commit: r998677 - in
/wicket/trunk/wicket/src/main/java/org/apache/wicket: protocol/http/
protocol/http/servlet/ util/tester/
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)