org.apache.struts2.portlet.result
public class: PortletActionRedirectResult [javadoc |
source]
java.lang.Object
org.apache.struts2.dispatcher.StrutsResultSupport
org.apache.struts2.portlet.result.PortletResult
org.apache.struts2.portlet.result.PortletActionRedirectResult
All Implemented Interfaces:
com.opensymphony.xwork2.util.reflection.ReflectionExceptionHandler, PortletActionConstants, com.opensymphony.xwork2.Result, StrutsStatics
Portlet modification of the
ServletActionRedirectResult .
This result uses the
ActionMapper provided by the
ActionMapperFactory to instruct the render phase to invoke the
specified action and (optional) namespace. This is better than the
PortletResult because it does not require you to encode the URL
patterns processed by the
ActionMapper in to your struts.xml
configuration files. This means you can change your URL patterns at any point
and your application will still work. It is strongly recommended that if you
are redirecting to another action, you use this result rather than the
standard redirect result.
See examples below for an example of how request parameters could be passed
in.
This result type takes the following parameters:
- actionName (default) - the name of the action that will be
redirect to
- namespace - used to determine which namespace the action is in
that we're redirecting to . If namespace is null, this defaults to the
current namespace
Example:
<!-- START SNIPPET: example -->
<package name="public" extends="struts-default">
<action name="login" class="...">
<!-- Redirect to another namespace -->
<result type="redirectAction">
<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
</action>
</package>
<package name="secure" extends="struts-default" namespace="/secure">
<-- Redirect to an action in the same namespace -->
<action name="dashboard" class="...">
<result>dashboard.jsp</result>
<result name="error" type="redirectAction">error</result>
</action>
<action name="error" class="...">
<result>error.jsp</result>
</action>
</package>
<package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters">
<-- Pass parameters (reportType, width and height) -->
<!--
The redirectAction url generated will be :
/genReport/generateReport.action?reportType=pie&width=100&height=100
-->
<action name="gatherReportInfo" class="...">
<result name="showReportResult" type="redirectAction">
<param name="actionName">generateReport</param>
<param name="namespace">/genReport</param>
<param name="reportType">pie</param>
<param name="width">100</param>
<param name="height">100</param>
</result>
</action>
</package>
<!-- END SNIPPET: example -->
Field Summary |
---|
public static final String | DEFAULT_PARAM | The default parameter |
protected String | actionName | |
protected String | namespace | |
protected String | method | |
protected List<String> | prohibitedResultParam | |
Methods from java.lang.Object: |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method from org.apache.struts2.portlet.result.PortletActionRedirectResult Detail: |
public PortletActionRedirectResult addParameter(String key,
Object value) {
requestParameters.put(key, String.valueOf(value));
return this;
}
Adds a request parameter to be added to the redirect url |
public void execute(ActionInvocation invocation) throws Exception {
actionName = conditionalParse(actionName, invocation);
if (portletMode != null) {
Map< PortletMode, String > namespaceMap = (Map< PortletMode, String >) invocation.getInvocationContext().get(
PortletActionConstants.MODE_NAMESPACE_MAP);
namespace = namespaceMap.get(portletMode);
}
if (namespace == null) {
namespace = invocation.getProxy().getNamespace();
} else {
namespace = conditionalParse(namespace, invocation);
}
if (method == null) {
method = "";
} else {
method = conditionalParse(method, invocation);
}
String resultCode = invocation.getResultCode();
if (resultCode != null) {
ResultConfig resultConfig = invocation.getProxy().getConfig().getResults().get(resultCode);
Map resultConfigParams = resultConfig.getParams();
for (Iterator i = resultConfigParams.entrySet().iterator(); i.hasNext();) {
Map.Entry e = (Map.Entry) i.next();
if (!prohibitedResultParam.contains(e.getKey())) {
requestParameters.put(e.getKey().toString(), e.getValue() == null ? "" : conditionalParse(e
.getValue().toString(), invocation));
}
}
}
StringBuilder tmpLocation = new StringBuilder(actionMapper.getUriFromActionMapping(new ActionMapping(actionName,
namespace, method, null)));
UrlHelper.buildParametersString(requestParameters, tmpLocation, "&");
setLocation(tmpLocation.toString());
super.execute(invocation);
}
|
public void handle(ReflectionException ex) {
// Only log as debug as they are probably parameters to be appended to the url
LOG.debug(ex.getMessage(), ex);
}
|
public void setActionMapper(ActionMapper actionMapper) {
this.actionMapper = actionMapper;
}
|
public void setActionName(String actionName) {
this.actionName = actionName;
}
|
public void setMethod(String method) {
this.method = method;
}
|
public void setNamespace(String namespace) {
this.namespace = namespace;
}
|