com.opensymphony.xwork2.interceptor
public class: AliasInterceptor [javadoc |
source]
java.lang.Object
com.opensymphony.xwork2.interceptor.AbstractInterceptor
com.opensymphony.xwork2.interceptor.AliasInterceptor
All Implemented Interfaces:
Interceptor
The aim of this Interceptor is to alias a named parameter to a different named parameter. By acting as the glue
between actions sharing similiar parameters (but with different names), it can help greatly with action chaining.
Action's alias expressions should be in the form of
#{ "name1" : "alias1", "name2" : "alias2" }.
This means that assuming an action (or something else in the stack) has a value for the expression named
name1 and the
action this interceptor is applied to has a setter named
alias1,
alias1 will be set with the value from
name1.
Interceptor parameters:
- aliasesKey (optional) - the name of the action parameter to look for the alias map (by default this is
aliases).
Extending the interceptor:
This interceptor does not have any known extension points.
Example code:
<action name="someAction" class="com.examples.SomeAction">
<!-- The value for the foo parameter will be applied as if it were named bar -->
<param name="aliases">#{ 'foo' : 'bar' }</param>
<interceptor-ref name="alias"/>
<interceptor-ref name="basicStack"/>
<result name="success">good_result.ftl</result>
</action>
| Field Summary |
|---|
| protected String | aliasesKey | |
| Method from com.opensymphony.xwork2.interceptor.AliasInterceptor Detail: |
public String intercept(ActionInvocation invocation) throws Exception {
ActionConfig config = invocation.getProxy().getConfig();
ActionContext ac = invocation.getInvocationContext();
// get the action's parameters
final Map parameters = config.getParams();
if (parameters.containsKey(aliasesKey)) {
String aliasExpression = (String) parameters.get(aliasesKey);
ValueStack stack = ac.getValueStack();
Object obj = stack.findValue(aliasExpression);
if (obj != null && obj instanceof Map) {
// override
Map aliases = (Map) obj;
Iterator itr = aliases.entrySet().iterator();
while (itr.hasNext()) {
Map.Entry entry = (Map.Entry) itr.next();
String name = entry.getKey().toString();
String alias = (String) entry.getValue();
Object value = stack.findValue(name);
if (null == value) {
// workaround
Map contextParameters = (Map) stack.getContext().get("parameters");
if (null != contextParameters) {
value = contextParameters.get(name);
}
}
if (null != value) {
stack.setValue(alias, value);
}
}
} else {
log.debug("invalid alias expression:" + aliasesKey);
}
}
return invocation.invoke();
}
|
public void setAliasesKey(String aliasesKey) {
this.aliasesKey = aliasesKey;
}
Sets the name of the action parameter to look for the alias map.
Default is aliases. |