Author: nilsga
Date: Fri Nov 21 12:37:49 2008
New Revision: 719704

URL: http://svn.apache.org/viewvc?rev=719704&view=rev
Log:
WW-2783 Evaluate anchor. Fix suggested by Ralf Fischer.

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java
    
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
    
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java?rev=719704&r1=719703&r2=719704&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java
 Fri Nov 21 12:37:49 2008
@@ -82,7 +82,7 @@
                        result = UrlHelper.buildUrl(_value, urlComponent.req, 
urlComponent.res, urlComponent.parameters, scheme, urlComponent.includeContext, 
urlComponent.encode, urlComponent.forceAddSchemeHostAndPort, 
urlComponent.escapeAmp);
                }
                if ( urlComponent.anchor != null && 
urlComponent.anchor.length() > 0 ) {
-                   result += '#' + urlComponent.anchor;
+                       result += '#' + 
urlComponent.findString(urlComponent.anchor);
                }
 
                String var = urlComponent.getVar();

Modified: 
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java?rev=719704&r1=719703&r2=719704&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
 (original)
+++ 
struts/struts2/trunk/plugins/portlet/src/main/java/org/apache/struts2/components/PortletUrlRenderer.java
 Fri Nov 21 12:37:49 2008
@@ -43,6 +43,10 @@
         * [EMAIL PROTECTED]
         */
        public void renderUrl(Writer writer, URL urlComponent) {
+               String action = null;
+               if(urlComponent.action != null) {
+                       action = urlComponent.findString(urlComponent.action);
+               }
                String scheme = urlComponent.req.getScheme();
 
                if (urlComponent.scheme != null) {
@@ -52,7 +56,7 @@
         String result;
         urlComponent.namespace = 
urlComponent.determineNamespace(urlComponent.namespace, urlComponent.stack, 
urlComponent.req);
         if (onlyActionSpecified(urlComponent)) {
-                result = PortletUrlHelper.buildUrl(urlComponent.action, 
urlComponent.namespace, urlComponent.method, urlComponent.parameters, 
urlComponent.portletUrlType, urlComponent.portletMode, 
urlComponent.windowState);
+                result = PortletUrlHelper.buildUrl(action, 
urlComponent.namespace, urlComponent.method, urlComponent.parameters, 
urlComponent.portletUrlType, urlComponent.portletMode, 
urlComponent.windowState);
         } else if(onlyValueSpecified(urlComponent)){
                 result = PortletUrlHelper.buildResourceUrl(urlComponent.value, 
urlComponent.parameters);
         }
@@ -60,7 +64,7 @@
                result = createDefaultUrl(urlComponent);
         }
         if ( urlComponent.anchor != null && urlComponent.anchor.length() > 0 ) 
{
-            result += '#' + urlComponent.anchor;
+               result += '#' + urlComponent.findString(urlComponent.anchor);
         }
 
         String var = urlComponent.getVar();

Modified: 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java?rev=719704&r1=719703&r2=719704&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java
 (original)
+++ 
struts/struts2/trunk/plugins/portlet/src/test/java/org/apache/struts2/components/PortletUrlRendererTest.java
 Fri Nov 21 12:37:49 2008
@@ -44,11 +44,43 @@
 
 public class PortletUrlRendererTest extends StrutsTestCase {
 
-       PortletUrlRenderer renderer;
+       PortletUrlRenderer renderer;
+       MockPortletURL renderUrl;
+       MockPortletURL actionUrl;
+       MockRenderRequest request;
+       MockRenderResponse response;
+       ActionContext ctx;
+       ValueStack stack;
 
        public void setUp() throws Exception {
                super.setUp();
-               renderer = new PortletUrlRenderer();
+               renderer = new PortletUrlRenderer();
+               renderUrl = new MockPortletURL(
+                               new MockPortalContext(), "render");
+               actionUrl = new MockPortletURL(
+                               new MockPortalContext(), "action");
+               request = new MockRenderRequest();
+               response = new MockRenderResponse() {
+                       @Override
+                       public PortletURL createActionURL() {
+                               return actionUrl;
+                       }
+                       @Override
+                       public PortletURL createRenderURL() {
+                               return renderUrl;
+                       }
+               };
+
+               ctx = ActionContext.getContext();
+               ctx.put(PortletActionConstants.PHASE,
+                               PortletActionConstants.RENDER_PHASE);
+               ctx.put(PortletActionConstants.REQUEST, request);
+               ctx.put(PortletActionConstants.RESPONSE, response);
+
+               Map<PortletMode, String> modeMap = new HashMap<PortletMode, 
String>();
+               modeMap.put(PortletMode.VIEW, "/view");
+               ctx.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
+               stack = ctx.getValueStack();
        }
 
        /**
@@ -57,26 +89,7 @@
         */
        public void 
testShouldIncludeCurrentNamespaceIfNoNamespaceSpecifiedForRenderUrl()
                        throws Exception {
-               final MockPortletURL portletUrl = new MockPortletURL(
-                               new MockPortalContext(), "render");
-               MockRenderRequest request = new MockRenderRequest();
-               MockRenderResponse response = new MockRenderResponse() {
-                       @Override
-                       public PortletURL createRenderURL() {
-                               return portletUrl;
-                       }
-               };
-
-               ActionContext ctx = ActionContext.getContext();
-               ctx.put(PortletActionConstants.PHASE,
-                               PortletActionConstants.RENDER_PHASE);
-               ctx.put(PortletActionConstants.REQUEST, request);
-               ctx.put(PortletActionConstants.RESPONSE, response);
-
-               Map<PortletMode, String> modeMap = new HashMap<PortletMode, 
String>();
-               modeMap.put(PortletMode.VIEW, "/view");
-               ctx.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
-               ValueStack stack = ctx.getValueStack();
+               
                URL url = new URL(stack, new PortletServletRequest(request, 
null),
                                new PortletServletResponse(response));
 
@@ -92,7 +105,7 @@
                StringWriter renderOutput = new StringWriter();
                renderer.renderUrl(renderOutput, url);
 
-               String action = portletUrl
+               String action = renderUrl
                                
.getParameter(PortletActionConstants.ACTION_PARAM);
                assertEquals("/view/current_namespace/testAction", action);
        }
@@ -103,26 +116,7 @@
         */
        public void 
testShouldIncludeCurrentNamespaceIfNoNamespaceSpecifiedForRenderFormUrl()
                        throws Exception {
-               final MockPortletURL portletUrl = new MockPortletURL(
-                               new MockPortalContext(), "render");
-               MockRenderRequest request = new MockRenderRequest();
-               MockRenderResponse response = new MockRenderResponse() {
-                       @Override
-                       public PortletURL createActionURL() {
-                               return portletUrl;
-                       }
-               };
-
-               ActionContext ctx = ActionContext.getContext();
-               ctx.put(PortletActionConstants.PHASE,
-                               PortletActionConstants.RENDER_PHASE);
-               ctx.put(PortletActionConstants.REQUEST, request);
-               ctx.put(PortletActionConstants.RESPONSE, response);
-
-               Map<PortletMode, String> modeMap = new HashMap<PortletMode, 
String>();
-               modeMap.put(PortletMode.VIEW, "/view");
-               ctx.put(PortletActionConstants.MODE_NAMESPACE_MAP, modeMap);
-               ValueStack stack = ctx.getValueStack();
+
                Form form = new Form(stack, new PortletServletRequest(request, 
null),
                                new PortletServletResponse(response));
 
@@ -135,11 +129,65 @@
                ai.setAction(new Object());
                ctx.setActionInvocation(ai);
 
-               StringWriter renderOutput = new StringWriter();
                renderer.renderFormUrl(form);
 
-               String action = portletUrl
+               String action = actionUrl
                                
.getParameter(PortletActionConstants.ACTION_PARAM);
                assertEquals("/view/current_namespace/testAction", action);
-       }
+       }
+       
+       public void testShouldEvaluateActionAsOGNLExpression() throws Exception 
{
+               
+               TestObject obj = new TestObject();
+               obj.someProperty = "EvaluatedProperty";
+               stack.push(obj);
+               MockActionInvocation ai = new MockActionInvocation();
+               MockActionProxy ap = new MockActionProxy();
+               ap.setActionName("testAction");
+               ap.setNamespace("");
+               ai.setProxy(ap);
+               ai.setStack(stack);
+               ctx.setActionInvocation(ai);
+               
+               URL url = new URL(stack, new PortletServletRequest(request, 
null),
+                               new PortletServletResponse(response));
+               url.setAction("%{someProperty}");
+               
+               StringWriter renderOutput = new StringWriter();
+               renderer.renderUrl(renderOutput, url);
+
+               String action = renderUrl
+                               
.getParameter(PortletActionConstants.ACTION_PARAM);
+               assertEquals("/view/EvaluatedProperty", action);
+               
+       }
+       
+       public void testShouldEvaluateAnchorAsOGNLExpression() throws Exception 
{
+               
+               TestObject obj = new TestObject();
+               obj.someProperty = "EvaluatedProperty";
+               stack.push(obj);
+               MockActionInvocation ai = new MockActionInvocation();
+               MockActionProxy ap = new MockActionProxy();
+               ap.setActionName("testAction");
+               ap.setNamespace("");
+               ai.setProxy(ap);
+               ai.setStack(stack);
+               ctx.setActionInvocation(ai);
+               
+               URL url = new URL(stack, new PortletServletRequest(request, 
null),
+                               new PortletServletResponse(response));
+               url.setAnchor("%{someProperty}");
+               
+               StringWriter renderOutput = new StringWriter();
+               renderer.renderUrl(renderOutput, url);
+               
assertTrue(renderOutput.toString().indexOf("#EvaluatedProperty") != -1);
+               
+       }
+       
+       private final static class TestObject {
+               public String someProperty;
+       }
+       
+       
 }


Reply via email to