Author: ate
Date: Fri Sep 14 18:30:26 2007
New Revision: 575844
URL: http://svn.apache.org/viewvc?rev=575844&view=rev
Log:
WICKET-655: New Wicket Portlet support: Encode Wicket urls through
RenderContext to allow a PortletRenderContext to replace them by PortletURLs
Much improved the portlet url encoding in WebRequestCodingStrategy such that
now all wicket-examples run straightforward as portlets, except for the
PrototypeApplication and the FramesApplication.
As Prototype Ajax support isn't on my list (now), and frames simply never can
be used in a portlet, initial Wicket portlet url mapping is now quite complete.
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=575844&r1=575843&r2=575844&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
Fri Sep 14 18:30:26 2007
@@ -19,6 +19,7 @@
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
@@ -39,9 +40,12 @@
import org.apache.wicket.RequestListenerInterface;
import org.apache.wicket.Session;
import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.behavior.IActivePageBehaviorListener;
import org.apache.wicket.behavior.IBehaviorListener;
import org.apache.wicket.protocol.http.UnitTestSettings;
+import org.apache.wicket.protocol.http.WebRequestCycle;
+import org.apache.wicket.protocol.http.portlet.PortletRequestContext;
import org.apache.wicket.request.IRequestCodingStrategy;
import org.apache.wicket.request.IRequestTargetMountsInfo;
import org.apache.wicket.request.RequestParameters;
@@ -238,8 +242,8 @@
// First check to see whether the target is mounted
CharSequence url = pathForTarget(requestTarget);
- RequestContext renderContext = RequestContext.get();
- boolean portletRequest = renderContext.isPortletRequest();
+ RequestContext requestContext = RequestContext.get();
+ boolean portletRequest = requestContext.isPortletRequest();
boolean sharedResourceURL = false;
if (url != null && !portletRequest)
@@ -248,11 +252,11 @@
}
else if (requestTarget instanceof
IBookmarkablePageRequestTarget)
{
- url = renderContext.encodeRenderURL(url == null ?
encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget) : url);
+ url = requestContext.encodeRenderURL(url == null ?
encode(requestCycle, (IBookmarkablePageRequestTarget)requestTarget) : url);
}
else if (requestTarget instanceof ISharedResourceRequestTarget)
{
- url = renderContext.encodeSharedResourceURL(url == null
? encode(requestCycle, (ISharedResourceRequestTarget)requestTarget) : url);
+ url = requestContext.encodeSharedResourceURL(url ==
null ? encode(requestCycle, (ISharedResourceRequestTarget)requestTarget) : url);
sharedResourceURL = true;
}
else if (requestTarget instanceof
IListenerInterfaceRequestTarget)
@@ -263,19 +267,43 @@
}
if (portletRequest)
{
- RequestListenerInterface rli =
((IListenerInterfaceRequestTarget)requestTarget).getRequestListenerInterface();
+ IListenerInterfaceRequestTarget
iliRequestTarget = (IListenerInterfaceRequestTarget)requestTarget;
+ RequestListenerInterface rli =
iliRequestTarget.getRequestListenerInterface();
if
(IResourceListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass())
||
IBehaviorListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
{
- url =
renderContext.encodeResourceURL(url);
+ url =
requestContext.encodeResourceURL(url);
}
else if
(IRedirectListener.class.isAssignableFrom(rli.getMethod().getDeclaringClass()))
{
- url =
renderContext.encodeRenderURL(url);
+ if
(((WebRequestCycle)requestCycle).getWebRequest().isAjax())
+ {
+ // TODO: Probably not all Ajax based redirects need to
break out of ResourceURL encoding
+ // Need to findout and/or
provide some kind of extension how to indicate this
+ url =
((PortletRequestContext)requestContext).encodeRenderURL(url,true);
+ }
+ else
+ {
+ url =
requestContext.encodeRenderURL(url);
+ }
}
else
{
- url =
renderContext.encodeActionURL(url);
+ PortletRequestContext prc =
(PortletRequestContext)requestContext;
+ boolean forceActionURL = prc.isAjax();
+ if (forceActionURL)
+ {
+ List behaviors =
iliRequestTarget.getTarget().getBehaviors();
+ for (int i = 0, size =
behaviors.size(); i<size; i++)
+ {
+ if
(AbstractAjaxBehavior.class.isAssignableFrom(behaviors.get(i).getClass()))
+ {
+ forceActionURL
= false;
+ break;
+ }
+ }
+ }
+ url = prc.encodeActionURL(url,
forceActionURL);
}
}
}