Hi Peter, On Thu, Sep 16, 2010 at 12:40 AM, <[email protected]> wrote:
> 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)); > + } > What is the reason to add this method at all ? Why not use WebRequest#isAjax() ? Why 'static' ? ServletWebRequest has a reference to its HttpServletRequest. Why do you want to check some other HttpServletRequest ?! > } > > 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) > { > > >
