You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2010/10/14 08:05:15 UTC
svn commit: r1022382 - in /wicket/trunk:
wicket-request/src/main/java/org/apache/wicket/request/http/
wicket/src/main/java/org/apache/wicket/ajax/
wicket/src/main/java/org/apache/wicket/protocol/http/servlet/
wicket/src/main/java/org/apache/wicket/requ...
Author: ivaynberg
Date: Thu Oct 14 06:05:15 2010
New Revision: 1022382
URL: http://svn.apache.org/viewvc?rev=1022382&view=rev
Log:
rollback original 3086 fix
Issue: WICKET-3086
Modified:
wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.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=1022382&r1=1022381&r2=1022382&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 Thu Oct 14 06:05:15 2010
@@ -118,29 +118,6 @@ public abstract class WebRequest extends
return Strings.isTrue(getHeader(HEADER_AJAX)) ||
Strings.isTrue(getRequestParameters().getParameterValue(PARAM_AJAX).toString());
}
-
-
- private static final String PARAM_AJAX_BASE_URL = "wicket:ajax:baseurl";
- private static final String HEADER_AJAX_BASE_URL = "Wicket-Ajax-BaseURL";
-
- /**
- * Returns the ajax base Url if this request is an Ajax request.
- *
- * @return if the request is an ajax request it will return the ajax base Url otherwise null
- */
- public String getAjaxBaseUrl()
- {
- if (isAjax())
- {
- String baseUrl = getHeader(HEADER_AJAX_BASE_URL);
-
- if (baseUrl != null)
- return baseUrl;
-
- return getRequestParameters().getParameterValue(PARAM_AJAX_BASE_URL).toString(null);
- }
- return null;
- }
/**
* Returns request with specified URL and same POST parameters as this request.
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java?rev=1022382&r1=1022381&r2=1022382&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AbstractDefaultAjaxBehavior.java Thu Oct 14 06:05:15 2010
@@ -297,7 +297,7 @@ public abstract class AbstractDefaultAja
Url oldBaseURL = requestCycle.getUrlRenderer().getBaseUrl();
WebRequest request = (WebRequest)requestCycle.getRequest();
- Url baseURL = Url.parse(request.getAjaxBaseUrl(), request.getCharset());
+ Url baseURL = Url.parse(request.getHeader("Wicket-Ajax-BaseURL"), request.getCharset());
requestCycle.getUrlRenderer().setBaseUrl(baseURL);
respond(target);
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=1022382&r1=1022381&r2=1022382&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Thu Oct 14 06:05:15 2010
@@ -576,7 +576,7 @@ public class AjaxRequestTarget implement
RequestCycle rc = (RequestCycle)requestCycle;
Url oldBaseURL = rc.getUrlRenderer().getBaseUrl();
WebRequest request = (WebRequest)requestCycle.getRequest();
- Url baseURL = Url.parse(request.getAjaxBaseUrl(), request.getCharset());
+ Url baseURL = Url.parse(request.getHeader("Wicket-Ajax-BaseURL"), request.getCharset());
rc.getUrlRenderer().setBaseUrl(baseURL);
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js?rev=1022382&r1=1022381&r2=1022382&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js Thu Oct 14 06:05:15 2010
@@ -1151,7 +1151,7 @@ Wicket.Ajax.Call.prototype = {
// reconfigure the form
form.target=iframe.name;
- form.action=this.request.url + "&wicket:ajax=true&wicket:ajax:baseurl=" + Wicket.Form.encode(Wicket.Ajax.baseUrl);
+ form.action=this.request.url + "&wicket:ajax=true";
form.method="post";
form.enctype="multipart/form-data";
form.encoding="multipart/form-data";
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=1022382&r1=1022381&r2=1022382&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 Thu Oct 14 06:05:15 2010
@@ -217,16 +217,13 @@ public class ServletWebResponse extends
if (webRequest.isAjax())
{
- String ajaxBaseUrl = webRequest.getAjaxBaseUrl();
+ String ajaxBaseUrl = httpServletRequest.getHeader("Wicket-Ajax-BaseURL");
if (ajaxBaseUrl == null)
throw new IllegalStateException(
"current ajax request is missing the base url header");
- String contextPath = httpServletRequest.getContextPath();
- String filterPrefix = webRequest.getFilterPrefix();
-
- current = Url.parse(contextPath + '/' + filterPrefix + ajaxBaseUrl, charset);
+ current = Url.parse('/' + ajaxBaseUrl, charset);
}
else
{
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java?rev=1022382&r1=1022381&r2=1022382&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/request/handler/render/WebPageRenderer.java Thu Oct 14 06:05:15 2010
@@ -27,7 +27,6 @@ import org.apache.wicket.request.compone
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.handler.RenderPageRequestHandler;
import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
-import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.WebResponse;
import org.apache.wicket.settings.IRequestCycleSettings.RenderStrategy;
import org.slf4j.Logger;
@@ -160,6 +159,7 @@ public class WebPageRenderer extends Pag
{
WebResponse response = (WebResponse)requestCycle.getResponse();
String relativeUrl = requestCycle.getUrlRenderer().renderUrl(url);
+ response.reset();
response.sendRedirect(relativeUrl);
}
@@ -169,132 +169,108 @@ public class WebPageRenderer extends Pag
@Override
public void respond(RequestCycle requestCycle)
{
- Url previousBaseUrl = null;
+ Url currentUrl = requestCycle.getUrlRenderer().getBaseUrl();
+ Url targetUrl = requestCycle.mapUrlFor(getRenderPageRequestHandler());
- try
- {
- // in case of ajax we have to set the proper base address for url rendering
- if (requestCycle.getRequest() instanceof WebRequest)
- {
- WebRequest webRequest = (WebRequest)requestCycle.getRequest();
- String ajaxBaseUrl = webRequest.getAjaxBaseUrl();
+ //
+ // the code below is little hairy but we have to handle 3 redirect policies
+ // and 3 rendering strategies
+ //
- if (ajaxBaseUrl != null)
- {
- Url currentBaseUrl = Url.parse(ajaxBaseUrl, webRequest.getCharset());
- previousBaseUrl = requestCycle.getUrlRenderer().setBaseUrl(currentBaseUrl);
- }
- }
+ // try to get an already rendered buffered response for current URL
+ BufferedWebResponse bufferedResponse = getAndRemoveBufferedResponse(currentUrl);
- Url currentUrl = requestCycle.getUrlRenderer().getBaseUrl();
- Url targetUrl = requestCycle.mapUrlFor(getRenderPageRequestHandler());
- boolean sameUrl = targetUrl.equals(currentUrl);
-
- //
- // the code below is little hairy but we have to handle 3 redirect policies
- // and 3 rendering strategies
- //
-
- // try to get an already rendered buffered response for current URL
- BufferedWebResponse bufferedResponse = getAndRemoveBufferedResponse(currentUrl);
-
- if (bufferedResponse != null)
- {
- logger.warn("The Buffered response should be handled by BufferedResponseRequestHandler");
- // if there is saved response for this URL render it
- bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
- }
- else if (getRedirectPolicy() == RedirectPolicy.NEVER_REDIRECT
- ||
- isOnePassRender()
- ||
- (sameUrl && !getPageProvider().isNewPageInstance() && !getPage().isPageStateless())
- ||
- (sameUrl && isRedirectToRender()))
+ if (bufferedResponse != null)
+ {
+ logger.warn("The Buffered response should be handled by BufferedResponseRequestHandler");
+ // if there is saved response for this URL render it
+ bufferedResponse.writeTo((WebResponse)requestCycle.getResponse());
+ }
+ else if (getRedirectPolicy() == RedirectPolicy.NEVER_REDIRECT || isOnePassRender() //
+ ||
+ (targetUrl.equals(currentUrl) && !getPageProvider().isNewPageInstance() && !getPage().isPageStateless()) //
+ || (targetUrl.equals(currentUrl) && isRedirectToRender()))
+ {
+ // if the policy is never to redirect
+ // or one pass render mode is on
+ // or the targetUrl matches current url and the page is not stateless
+ // or the targetUrl matches current url, page is stateless but it's redirect-to-render
+ // just render the page
+ BufferedWebResponse response = renderPage(currentUrl, requestCycle);
+ if (response != null)
{
- // if the policy is never to redirect
- // or one pass render mode is on
- // or the targetUrl matches current url and the page is not stateless
- // or the targetUrl matches current url, page is stateless but it's redirect-to-render
- // just render the page
- BufferedWebResponse response = renderPage(currentUrl, requestCycle);
- if (response != null)
- {
- response.writeTo((WebResponse)requestCycle.getResponse());
- }
+ response.writeTo((WebResponse)requestCycle.getResponse());
}
- else if (!sameUrl && (getRedirectPolicy() == RedirectPolicy.ALWAYS_REDIRECT || isRedirectToRender()))
+ }
+ else if (!targetUrl.equals(currentUrl) && //
+ (getRedirectPolicy() == RedirectPolicy.ALWAYS_REDIRECT || isRedirectToRender()))
+ {
+ // if target URL is different
+ // and render policy is always-redirect or it's redirect-to-render
+ redirectTo(targetUrl, requestCycle);
+ }
+ else if (!targetUrl.equals(currentUrl) //
+ &&
+ isSessionTemporary() && getPage().isPageStateless())
+ {
+ // if target URL is different and session is temporary and page is stateless
+ // this is special case when page is stateless but there is no session so we can't
+ // render it to buffer
+
+ // note: if we had session here we would render the page to buffer and then redirect to
+ // URL generated *after* page has been rendered (the statelessness may change during
+ // render). this would save one redirect because now we have to render to URL generated
+ // *before* page is rendered, render the page, get URL after render and if the URL is
+ // different (meaning page is not stateless), save the buffer and redirect again (which
+ // is pretty much what the next step does)
+ redirectTo(targetUrl, requestCycle);
+ }
+ else if (isRedirectToBuffer())
+ {
+ // redirect to buffer
+ BufferedWebResponse response = renderPage(targetUrl, requestCycle);
+
+ if (response == null)
{
- // if target URL is different
- // and render policy is always-redirect or it's redirect-to-render
- redirectTo(targetUrl, requestCycle);
+ return;
}
- else if (!sameUrl && isSessionTemporary() && getPage().isPageStateless())
+
+ // check if the url hasn't changed after page has been rendered
+ // (i.e. the stateless flag might have changed which could result in different page url)
+ Url targetUrl2 = requestCycle.mapUrlFor(getRenderPageRequestHandler());
+
+ if (targetUrl.getSegments().equals(targetUrl2.getSegments()) == false)
{
- // if target URL is different and session is temporary and page is stateless
- // this is special case when page is stateless but there is no session so we can't
- // render it to buffer
-
- // note: if we had session here we would render the page to buffer and then redirect to
- // URL generated *after* page has been rendered (the statelessness may change during
- // render). this would save one redirect because now we have to render to URL generated
- // *before* page is rendered, render the page, get URL after render and if the URL is
- // different (meaning page is not stateless), save the buffer and redirect again (which
- // is pretty much what the next step does)
- redirectTo(targetUrl, requestCycle);
+ // the amount of segments is different - generated relative URLs will not work, we
+ // need to rerender the page. This shouldn't happen, but in theory it can - with
+ // RequestHandlerEncoders that produce different URLs with different amount of
+ // segments for stateless and stateful pages
+ response = renderPage(targetUrl2, requestCycle);
}
- else if (isRedirectToBuffer())
- {
- // redirect to buffer
- BufferedWebResponse response = renderPage(targetUrl, requestCycle);
-
- if (response == null)
- {
- return;
- }
-
- // check if the url hasn't changed after page has been rendered
- // (i.e. the stateless flag might have changed which could result in different page url)
- Url targetUrl2 = requestCycle.mapUrlFor(getRenderPageRequestHandler());
-
- if (targetUrl.getSegments().equals(targetUrl2.getSegments()) == false)
- {
- // the amount of segments is different - generated relative URLs will not work, we
- // need to rerender the page. This shouldn't happen, but in theory it can - with
- // RequestHandlerEncoders that produce different URLs with different amount of
- // segments for stateless and stateful pages
- response = renderPage(targetUrl2, requestCycle);
- }
-
- // if page is still stateless after render
- if (getPage().isPageStateless() && !enableRedirectForStatelessPage())
- {
- // we don't want the redirect to happen for stateless page
- // example:
- // when a normal mounted stateful page is hit at /mount/point
- // wicket renders the page to buffer and redirects to /mount/point?12
- // but for stateless page the redirect is not necessary
- // also for listener interface on stateful page we want to redirect
- // after the listener is invoked, but on stateless page the user
- // must ask for redirect explicitely
- response.writeTo((WebResponse)requestCycle.getResponse());
- }
- else
- {
- storeBufferedResponse(targetUrl2, response);
- redirectTo(targetUrl2, requestCycle);
- }
+ // if page is still stateless after render
+ if (getPage().isPageStateless() && !enableRedirectForStatelessPage())
+ {
+ // we don't want the redirect to happen for stateless page
+ // example:
+ // when a normal mounted stateful page is hit at /mount/point
+ // wicket renders the page to buffer and redirects to /mount/point?12
+ // but for stateless page the redirect is not necessary
+ // also for listener interface on stateful page we want to redirect
+ // after the listener is invoked, but on stateless page the user
+ // must ask for redirect explicitely
+ response.writeTo((WebResponse)requestCycle.getResponse());
}
else
{
- throw new IllegalStateException("Unknown RenderStrategy.");
+ storeBufferedResponse(targetUrl2, response);
+
+ redirectTo(targetUrl2, requestCycle);
}
}
- finally
+ else
{
- if (previousBaseUrl != null)
- requestCycle.getUrlRenderer().setBaseUrl(previousBaseUrl);
+ throw new IllegalStateException("Unknown RenderStrategy.");
}
}