カスタムコンバーターの引数
Struts2のカスタムコンバーターでは次のメソッドを用意する必要があるが、
public Object convertFromString(Map arg0, String[] arg1, Class arg2);
こちらの arg1 の配列(String[]) の引数がどういう内容で呼び出されるのかは、プログラムで使用されているGetter/Setterの型によって渡され方が変わる。
UserTypeという型用のStruts2コンバーターを作成した場合
Actionのプロパティで
public void setFoo( UserType a ); public UserType getFoo();
となっている場合に、フォームからfooパラメータが複数投げられると、 arg1はその複数のfooパラメータが配列となって呼ばれる。
foo=a&foo=b&foo=1
のようなURLのパラメータとすると、 convertFromString の arg1 は { "a", "b", "1" } となる。
一方次のようにプロパティの型が配列となっている場合
public void setFoo( UserType[] a ); public UserType[] getFoo();
convertFromStringは投げられたパラメータの数だけ呼び出され の arg1 は { "a" }、{ "b" }、{ "1" }とそれぞれ要素が1つの配列で3回呼び出される。
この仕組みによって、Struts2でコンバータを書く場合は arg1 の最初の要素だけを処理するようにして置けば、単一、配列両方で使えるコンバーターになる。(単一の想定で、複数投げられた場合は2番目以降が無視されるようになる)