You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by ni...@apache.org on 2008/11/21 21:37:49 UTC

svn commit: r719704 - in /struts/struts2/trunk: core/src/main/java/org/apache/struts2/components/ plugins/portlet/src/main/java/org/apache/struts2/components/ plugins/portlet/src/test/java/org/apache/struts2/components/

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 @@
 	 * {@inheritDoc}
 	 */
 	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;
+	}
+	
+	
 }