struts2参数映射

struts2参数映射,struts2,Struts2,表单通过Ajax请求提交,表单中的所有参数都以随机数作为前缀。例: 123456567_姓名,123456567_年龄(数字123456567是动态的) 我想将这些参数映射到操作字段,即名称和年龄 有没有办法告诉struts2这样做?拦截器提供正常的参数注入功能。我不知道有什么方法可以配置这个拦截器来实现所需的行为,但您始终可以选择扩展拦截器 因此,可以通过扩展参数sinterceptor类。下面是一个示例,说明了如何做到这一点: import java.util.HashMap; import

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

123456567_姓名,123456567_年龄(数字123456567是动态的)

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


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

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

因此,可以通过扩展参数sinterceptor类。下面是一个示例,说明了如何做到这一点:

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;
    }
}
import java.util.HashMap;
导入java.util.Map;
将com.opensymphony.xwork2.interceptor.parameters导入接收器;
导入com.opensymphony.xwork2.util.ValueStack;
/**
*警告:未测试的代码!
*/
公共类CustomParameterInterceptor将参数扩展为接收器{
私有静态最终长serialVersionUID=-3673037400195648706L;
@凌驾
受保护的void setParameters(对象操作、ValueStack堆栈、最终贴图参数){
setParameters(操作、堆栈、getRealParamMap(参数));
}
受保护的映射getRealParamMap(映射参数){
映射结果=新的HashMap();
对于(Map.Entry e:parameters.entrySet()){
result.put(e.getKey().split(“”)[1],e.getValue());
}
返回结果;
}
}

如果您打算使用此方法,您可能应该用更强大的方法替换我的getRealParamMap方法。

你好,Alban,谢谢您的建议和代码。这是一个很好的解决方案,但我想知道是否还有其他方法可以做到这一点。我想知道它们是否有任何注释,我可以在模型类字段上使用这些注释来将请求参数与字段名匹配。