2012-09-17 120 views
0

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

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

我想这些参数,其是姓名和年龄动作字段映射。

有没有办法告诉struts2来做到这一点?

回答

1

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

所以你可以通过扩展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方法。

+0

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