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 09:53:26 UTC

svn commit: r1022403 - in /wicket/trunk: wicket-request/src/main/java/org/apache/wicket/request/ wicket-request/src/main/java/org/apache/wicket/request/http/ wicket/src/main/java/org/apache/wicket/mock/ wicket/src/main/java/org/apache/wicket/protocol/h...

Author: ivaynberg
Date: Thu Oct 14 07:53:26 2010
New Revision: 1022403

URL: http://svn.apache.org/viewvc?rev=1022403&view=rev
Log:
better method name and javadoc

Modified:
    wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Request.java
    wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/http/WebRequest.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockWebRequest.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
    wicket/trunk/wicket/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
    wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java

Modified: wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Request.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Request.java?rev=1022403&r1=1022402&r2=1022403&view=diff
==============================================================================
--- wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Request.java (original)
+++ wicket/trunk/wicket-request/src/main/java/org/apache/wicket/request/Request.java Thu Oct 14 07:53:26 2010
@@ -38,19 +38,68 @@ public abstract class Request
 	public abstract Url getUrl();
 
 	/**
-	 * Returns the base URL relative to which this request should be processed.
+	 * Returns the url against which the client, usually the browser, will resolve relative urls in
+	 * the rendered markup. If the client is a browser this is the url in the browser's address bar.
 	 * 
-	 * If the current requested url is:
+	 * <p>
+	 * Under normal circumstances the client and request ({@link #getUrl()}) urls are the same.
+	 * Handling an Ajax request, however, is a good example of when they may be different.
+	 * Technologies such as XHR are free to request whatever url they wish <strong>without
+	 * modifying</strong> the client url; however, any produced urls will be evaluated by the client
+	 * against the client url - not against the request url.
+	 * </p>
+	 * <p>
+	 * Lets take a simple example: <br>
+	 * 
+	 * Suppose we are on a client detail page. This page contains an Ajax link which opens a list of
+	 * client's orders. Each order has a link that goes to the order detail page.
+	 * 
+	 * The client detail page is located at
+	 * 
+	 * <pre>
+	 * /detail/customer/15
+	 * </pre>
+	 * 
+	 * and the order detail page is located at
+	 * 
+	 * <pre>
+	 * /order/22
+	 * </pre>
+	 * 
+	 * The Ajax link which renders the detail section is located at
+	 * 
+	 * <pre>
+	 *  /detail/wicket?page 3
+	 * </pre>
+	 * 
+	 * Lets run through the execution and see what happens when the XHR request is processed:
 	 * 
 	 * <pre>
-	 * /con/text/fil/ter/wicket/page?1&foo=bar
+	 * request 1: /details/customer/15
+	 * client url: details/customer/15 (the url in the browser's address bar)
+	 * request url: details/customer/15
+	 * Wicket renders relative Ajax details anchor as ../../wicket/page?3  
+	 * 
+	 * ../../wicket/page?3 resolved against current client url details/customer/15 yields:
+	 * request 2: /wicket/page?3
+	 * client url: customer/15 (unchanged since XHRs requests dont change it)
+	 * request url: wicket/ajax/page?3
+	 * 
+	 * now Wicket has to render a relative url to /details/order/22. If Wicket renders 
+	 * it against the request url it will be: ../order/22, and later evaluated on the
+	 * client will result in /customer/order/22 which is incorrect.
 	 * </pre>
 	 * 
-	 * the relative url is: </pre> wicket/page </pre>
+	 * This is why implementations of {@link Request} must track the client url, so that relative
+	 * urls can be rendered against the same url they will be evaluated against on the client -
+	 * which is not always the same as the request url. For example, Wicket's Ajax implementation
+	 * always sends the current client url in a header along with the XHR request so that Wicket can
+	 * correctly render relative urls against it.
+	 * </p>
 	 * 
-	 * @return ajax base url
+	 * @return client url
 	 */
-	public abstract Url getBaseUrl();
+	public abstract Url getClientUrl();
 
 	/**
 	 * In case this request has been created using {@link #cloneWithUrl(Url)}, this method should
@@ -136,7 +185,7 @@ public abstract class Request
 			}
 
 			@Override
-			public Url getBaseUrl()
+			public Url getClientUrl()
 			{
 				return getUrl();
 			}

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=1022403&r1=1022402&r2=1022403&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 07:53:26 2010
@@ -186,9 +186,9 @@ public abstract class WebRequest extends
 			}
 
 			@Override
-			public Url getBaseUrl()
+			public Url getClientUrl()
 			{
-				return WebRequest.this.getBaseUrl();
+				return WebRequest.this.getClientUrl();
 			}
 		};
 	}

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockWebRequest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockWebRequest.java?rev=1022403&r1=1022402&r2=1022403&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockWebRequest.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/mock/MockWebRequest.java Thu Oct 14 07:53:26 2010
@@ -252,7 +252,7 @@ public class MockWebRequest extends WebR
 	}
 
 	@Override
-	public Url getBaseUrl()
+	public Url getClientUrl()
 	{
 		return new Url(url.getSegments(), Collections.<QueryParameter> emptyList());
 	}

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=1022403&r1=1022402&r2=1022403&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 Thu Oct 14 07:53:26 2010
@@ -118,10 +118,10 @@ public class ServletWebRequest extends W
 	 * 
 	 * <pre>
 	 * wicket / bookmarkab
-	 * @see org.apache.wicket.request.Request#getBaseUrl()
+	 * @see org.apache.wicket.request.Request#getClientUrl()
 	 */
 	@Override
-	public Url getBaseUrl()
+	public Url getClientUrl()
 	{
 		if (!isAjax())
 		{

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=1022403&r1=1022402&r2=1022403&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 07:53:26 2010
@@ -216,7 +216,7 @@ public class ServletWebResponse extends 
 
 			final Url current;
 
-			current = webRequest.getBaseUrl();
+			current = webRequest.getClientUrl();
 
 			Url append = Url.parse(url, charset);
 			current.concatSegments(append.getSegments());

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java?rev=1022403&r1=1022402&r2=1022403&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/request/cycle/RequestCycle.java Thu Oct 14 07:53:26 2010
@@ -154,7 +154,7 @@ public class RequestCycle extends Reques
 	protected UrlRenderer newUrlRenderer()
 	{
 		// All URLs will be rendered relative to current request (can be overriden afterwards)
-		return new UrlRenderer(getRequest().getBaseUrl());
+		return new UrlRenderer(getRequest().getClientUrl());
 	}
 
 	/**

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java?rev=1022403&r1=1022402&r2=1022403&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/AbstractMapperTest.java Thu Oct 14 07:53:26 2010
@@ -71,7 +71,7 @@ public abstract class AbstractMapperTest
 			}
 
 			@Override
-			public Url getBaseUrl()
+			public Url getClientUrl()
 			{
 				return url;
 			}

Modified: wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java?rev=1022403&r1=1022402&r2=1022403&view=diff
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java (original)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/request/mapper/ResourceMapperTest.java Thu Oct 14 07:53:26 2010
@@ -60,7 +60,7 @@ public class ResourceMapperTest extends 
 			}
 
 			@Override
-			public Url getBaseUrl()
+			public Url getClientUrl()
 			{
 				return getUrl();
 			}