フォームはAjaxリクエストを介して送信され、フォーム内のすべてのパラメーターの前に乱数が付けられます。元:
123456567_name、123456567_age(番号123456567は動的です)
これらのパラメーターを、名前と年齢であるアクションフィールドにマップしたいと思います。
struts2にこれを行うように指示する方法はありますか?
フォームはAjaxリクエストを介して送信され、フォーム内のすべてのパラメーターの前に乱数が付けられます。元:
123456567_name、123456567_age(番号123456567は動的です)
これらのパラメーターを、名前と年齢であるアクションフィールドにマップしたいと思います。
struts2にこれを行うように指示する方法はありますか?
通常のパラメーターインジェクション機能は、ParametersInterceptorインターセプターによって提供されます。必要な動作を実装するようにこのインターセプターを構成する方法はわかりませんが、インターセプターを拡張するオプションは常にあります。
したがって、ParametersInterceptorクラスを拡張することにより、独自のインターセプターを作成できます。これを行う方法の例を次に示します。
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メソッドをより強力なものに置き換える必要があります。