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