カスタムコンバーターの引数

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番目以降が無視されるようになる)