mirror of
https://github.com/apache/struts.git
synced 2026-08-11 01:27:14 +00:00
WW-2783 Evaluate anchor. Fix suggested by Ralf Fischer.
git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@719704 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -82,7 +82,7 @@ public class ServletUrlRenderer implements UrlRenderer {
|
||||
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();
|
||||
|
||||
@@ -43,6 +43,10 @@ public class PortletUrlRenderer implements UrlRenderer {
|
||||
* {@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 @@ public class PortletUrlRenderer implements UrlRenderer {
|
||||
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 @@ public class PortletUrlRenderer implements UrlRenderer {
|
||||
result = createDefaultUrl(urlComponent);
|
||||
}
|
||||
if ( urlComponent.anchor != null && urlComponent.anchor.length() > 0 ) {
|
||||
result += '#' + urlComponent.anchor;
|
||||
result += '#' + urlComponent.findString(urlComponent.anchor);
|
||||
}
|
||||
|
||||
String var = urlComponent.getVar();
|
||||
|
||||
+93
-45
@@ -44,11 +44,43 @@ import com.opensymphony.xwork2.util.ValueStack;
|
||||
|
||||
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 class PortletUrlRendererTest extends StrutsTestCase {
|
||||
*/
|
||||
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 @@ public class PortletUrlRendererTest extends StrutsTestCase {
|
||||
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 class PortletUrlRendererTest extends StrutsTestCase {
|
||||
*/
|
||||
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 @@ public class PortletUrlRendererTest extends StrutsTestCase {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user