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();
}