You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by at...@apache.org on 2007/09/04 12:50:24 UTC
svn commit: r572613 -
/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
Author: ate
Date: Tue Sep 4 03:50:23 2007
New Revision: 572613
URL: http://svn.apache.org/viewvc?rev=572613&view=rev
Log:
WICKET-655: New Wicket Portlet support: Encode Wicket urls through RenderContext to allow a PortletRenderContext to replace them by PortletURLs
See: https://issues.apache.org/jira/browse/WICKET-655
- Switching to a new 1.3.0-beta3-portlet-support branch and provide a much improved implementation which now covers most standard use-cases I think
Modified:
wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
Modified: wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java?rev=572613&r1=572612&r2=572613&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java (original)
+++ wicket/branches/wicket-1.3.0-beta3-portlet-support/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/request/WebRequestCodingStrategy.java Tue Sep 4 03:50:23 2007
@@ -29,14 +29,17 @@
import org.apache.wicket.IPageMap;
import org.apache.wicket.IRedirectListener;
import org.apache.wicket.IRequestTarget;
+import org.apache.wicket.IResourceListener;
import org.apache.wicket.Page;
import org.apache.wicket.PageMap;
import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestContext;
import org.apache.wicket.Request;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.RequestListenerInterface;
import org.apache.wicket.Session;
import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.behavior.IBehaviorListener;
import org.apache.wicket.protocol.http.UnitTestSettings;
import org.apache.wicket.request.IRequestCodingStrategy;
import org.apache.wicket.request.IRequestTargetMountsInfo;
@@ -234,52 +237,89 @@
// First check to see whether the target is mounted
CharSequence url = pathForTarget(requestTarget);
- if (url != null)
+ RequestContext renderContext = RequestContext.get();
+ boolean portletRequest = renderContext.isPortletRequest();
+ boolean sharedResourceURL = false;
+
+ if (url != null && !portletRequest)
{
// Do nothing - we've found the URL and it's mounted.
}
else if (requestTarget instanceof IBookmarkablePageRequestTarget)
{
- url = encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget);
+ url = renderContext.encodeRenderURL(url == null ? encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget) : url);
}
else if (requestTarget instanceof ISharedResourceRequestTarget)
{
- url = encode(requestCycle, (ISharedResourceRequestTarget)requestTarget);
+ url = renderContext.encodeSharedResourceURL(url == null ? encode(requestCycle, (ISharedResourceRequestTarget)requestTarget) : url);
+ sharedResourceURL = true;
}
else if (requestTarget instanceof IListenerInterfaceRequestTarget)
{
- url = encode(requestCycle, (IListenerInterfaceRequestTarget)requestTarget);
- }
- else if (requestTarget instanceof IPageRequestTarget)
- {
- // This calls page.urlFor(IRedirectListener.INTERFACE), which calls
- // the function we're in again. We therefore need to jump out here
- // and return the url immediately, otherwise we end up prefixing it
- // with relative path or absolute prefixes twice.
- return encode(requestCycle, (IPageRequestTarget)requestTarget);
+ if (url == null)
+ {
+ url = encode(requestCycle, (IListenerInterfaceRequestTarget)requestTarget);
+ }
+ if (portletRequest)
+ {
+ RequestListenerInterface rli = ((IListenerInterfaceRequestTarget)requestTarget).getRequestListenerInterface();
+ if (IResourceListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass())
+ || IBehaviorListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
+ {
+ url = renderContext.encodeResourceURL(url);
+ }
+ else if (IRedirectListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
+ {
+ url = renderContext.encodeRenderURL(url);
+ }
+ else
+ {
+ url = renderContext.encodeActionURL(url);
+ }
+ }
}
- // fallthough for non-default request targets
- else
+ else if (url == null)
{
- url = doEncode(requestCycle, requestTarget);
+ if (requestTarget instanceof IPageRequestTarget)
+ {
+ // This calls page.urlFor(IRedirectListener.INTERFACE), which calls
+ // the function we're in again. We therefore need to jump out here
+ // and return the url immediately, otherwise we end up prefixing it
+ // with relative path or absolute prefixes twice.
+ return encode(requestCycle, (IPageRequestTarget)requestTarget);
+ }
+ // fallthough for non-default request targets
+ else
+ {
+ url = doEncode(requestCycle, requestTarget);
+ }
}
if (url != null)
{
- // Add the actual URL. This will be relative to the Wicket
- // Servlet/Filter, with no leading '/'.
- PrependingStringBuffer prepender = new PrependingStringBuffer(url.toString());
-
- // Prepend prefix to the URL to make it relative to the current
- // request.
- prepender.prepend(requestCycle.getRequest().getRelativePathPrefixToWicketHandler());
-
- String result = prepender.toString();
- // We need to special-case links to the home page if we're at the
- // same level.
- if (result.length() == 0)
+ String result = null;
+
+ if (!sharedResourceURL && portletRequest)
+ {
+ result = url.toString();
+ }
+ else
{
- result = "./";
+ // Add the actual URL. This will be relative to the Wicket
+ // Servlet/Filter, with no leading '/'.
+ PrependingStringBuffer prepender = new PrependingStringBuffer(url.toString());
+
+ // Prepend prefix to the URL to make it relative to the current
+ // request.
+ prepender.prepend(requestCycle.getRequest().getRelativePathPrefixToWicketHandler());
+
+ result = prepender.toString();
+ // We need to special-case links to the home page if we're at the
+ // same level.
+ if (result.length() == 0)
+ {
+ result = "./";
+ }
}
return requestCycle.getOriginalResponse().encodeURL(result);
}