struts2参数映射

时间:2012-09-17 02:48:34

标签: struts2

表单是通过Ajax请求提交的,表单中的所有参数都以随机数为前缀。例如:

123456567_name,123456567_age(编号123456567是动态的)

我想将这些参数映射到名称和年龄的操作字段。

有没有办法告诉struts2这样做?

1 个答案:

答案 0 :(得分:1)

ParametersInterceptor拦截器提供正常参数注入功能。我不知道你有什么方法可以配置这个拦截器来实现你需要的行为,但你总是可以选择扩展拦截器。

所以你可以通过扩展ParametersInterceptor类来create your own interceptor。这是一个如何做到的例子:

import java.util.HashMap;
import java.util.Map;

import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
import com.opensymphony.xwork2.util.ValueStack;

/**
 *  WARNING: Untested code !
 */
public class CustomParameterInterceptor extends ParametersInterceptor{
    private static final long serialVersionUID = -3673037400195648706L;

    @Override
    protected void setParameters(Object action, ValueStack stack, final Map<String, Object> parameters) {
        super.setParameters(action, stack, getRealParamMap(parameters));
    }

    protected Map<String, Object> getRealParamMap(Map<String, Object> parameters) {
        Map<String, Object> result = new HashMap<String, Object>();
        for (Map.Entry<String, Object> e  : parameters.entrySet()) {
            result.put(e.getKey().split("_")[1], e.getValue());
        }
        return result;
    }
}

如果你打算使用它,你应该用更强大的东西替换我的getRealParamMap方法。