Author: pete
Date: Wed Sep 15 22:39:59 2010
New Revision: 997528
URL: http://svn.apache.org/viewvc?rev=997528&view=rev
Log:
fixed non-working ajax redirects: WICKET-3048
Modified:
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.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
Modified:
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.java?rev=997528&r1=997527&r2=997528&view=diff
==============================================================================
---
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.java
(original)
+++
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.java
Wed Sep 15 22:39:59 2010
@@ -104,8 +104,8 @@ public abstract class WebRequest extends
/**
* Marker parameter for AjaxRequest.
*/
- private static final String PARAM_AJAX = "wicket:ajax";
- private static final String HEADER_AJAX = "Wicket-Ajax";
+ protected static final String PARAM_AJAX = "wicket:ajax";
+ protected static final String HEADER_AJAX = "Wicket-Ajax";
/**
* Returns whether this request is an Ajax request. This implementation
only checks for value of
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=997528&r1=997527&r2=997528&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
Wed Sep 15 22:39:59 2010
@@ -371,4 +371,23 @@ 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=997528&r1=997527&r2=997528&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
Wed Sep 15 22:39:59 2010
@@ -31,7 +31,7 @@ import org.apache.wicket.util.lang.Args;
/**
* WebResponse that wraps a {...@link ServletWebResponse}.
- *
+ *
* @author Matej Knopp
*/
public class ServletWebResponse extends WebResponse
@@ -41,7 +41,7 @@ public class ServletWebResponse extends
/**
* Construct.
- *
+ *
* @param httpServletRequest
* @param httpServletResponse
*/
@@ -57,7 +57,7 @@ public class ServletWebResponse extends
/**
* Returns the wrapped response
- *
+ *
* @return wrapped response
*/
public final HttpServletResponse getHttpServletResponse()
@@ -223,25 +223,35 @@ public class ServletWebResponse extends
@Override
public void sendRedirect(String url)
{
- sendRedirect(url, false);
- }
-
- private void sendRedirect(String url, boolean cacheable)
- {
- redirect = true;
- url = getAbsoluteURL(url);
- url = httpServletResponse.encodeRedirectURL(url);
-
try
{
- // proxies eventually cache '302 temporary redirect'
responses:
- // for most wicket use cases this is fatal since
redirects are
- // usually highly dynamic and can not be statically
mapped
- // to a request url in general
- if (cacheable == false)
- this.disableCaching();
+ redirect = true;
+ url = getAbsoluteURL(url);
+ url = httpServletResponse.encodeRedirectURL(url);
+
+ // wicket redirects should never be cached
+ this.disableCaching();
+
+ if (ServletWebRequest.isAjax(httpServletRequest))
+ {
+ 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.
+ */
+ httpServletResponse.getWriter().write(
+ "<ajax-response><redirect>" + url +
"</redirect></ajax-response>");
- httpServletResponse.sendRedirect(url);
+ setContentType("text/xml;charset=" +
httpServletRequest.getCharacterEncoding());
+ }
+ else
+ {
+ httpServletResponse.sendRedirect(url);
+ }
}
catch (IOException e)
{