I don't know if the cast to (ServletWebRequest) in webapplicat...@383 is safe?
return new HeaderBufferingWebResponse(new
ServletWebResponse((ServletWebRequest)webRequest,
If it is safe then why not change
protected WebResponse newWebResponse(final WebRequest webRequest, final
HttpServletResponse httpServletResponse)
to
protected WebResponse newWebResponse(final ServletWebRequest
webRequest, final HttpServletResponse httpServletResponse)
?
That's exactly the location in code I did not know how to proceed.
Igor mentioned that abstract WebRequest does not necessarily have to be
ServletWebRequest when running in different containers.
@dev: any opinions on that?
Am 20.09.2010 um 10:30 schrieb Martin Grigorov:
> Please review r998677.
> I implemented the logic we discussed in IRC with you before your change.
>
> On Mon, Sep 20, 2010 at 10:24 AM, Peter Ertl <[email protected]> wrote:
>
>> Hi Martin,
>>
>> I am aware of that uglyness but I could not figure out a clean way to get
>> around it.
>>
>> When fixing WICKET-3048 I needed a way to detect if the current request is
>> of type 'ajax'.
>>
>> However the ctor from ServletWebResponse is
>>
>> public ServletWebResponse(HttpServletRequest httpServletRequest,
>> HttpServletResponse httpServletResponse)
>>
>> To change it to
>>
>> public ServletWebResponse(ServletWebRequest servletWebRequest,
>> HttpServletResponse httpServletResponse)
>>
>> you would need to instantiate
>>
>> public ServletWebRequest(HttpServletRequest httpServletRequest,
>> String filterPrefix)
>>
>> However there's no easy way to get 'filterPrefix' in the relevant places so
>> I was kind of stuck there.
>>
>> Note my TODO in ServletWebRequest line 389 :-(
>>
>> If you can figure out a clean way to get this done I will appreciate that
>> :-)
>>
>>
>>
>>
>>
>>
>> Am 19.09.2010 um 16:22 schrieb Martin Grigorov:
>>
>>> 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)
>>>> {
>>>>
>>>>
>>>>
>>
>>