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.");
                }
        }
 


Reply via email to