いまさらStrutsのActionFormでハマった
昔過ぎてどうやっていたか忘れていて小一時間ハマったのでメモ
複数のIDを渡したくてListを使ったのだが、なかなかうまく行かなかった。
最初は単純にsetter/getterを用意したが、List#setでIndexOutOfBoundsが発生した。
private List<BigDecimal> ids = new ArrayList<BigDecimal>(); public void getIds() { return ids; } public void setIds(List<BigDecimal> ids) { this.ids = ids; }
自動的にリストのサイズを拡張するListの実装を作って対処。
public class AutoResizeArrayList<E> extends ArrayList<E> { @Override public E set(int index, E element) { for (int i = size(); i <= index; i++) { add(null); } return super.set(index, element); }; @Override public E get(int index) { return super.get(index); } }
次に、List#get()でしたものがナゼかStringになってしまう現象に遭遇。
これは、プロパティがセットされる際にgetIds()したリストへset()しているが、その時にStringがセットされていた。
(Genericsだとこう可能性はあることは知っていたが、初めて遭遇した)
そこで、setIds(List
ちなみにsetIds(List