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)