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; + } + + }