Wicket7 では、IChoiceRenderer の実装しなくてはならないメソッドが増えている!
public T getObject(String id, IModel<? extends List<? extends T>> choices)
DropDownChoice で IChoiceRenderer を使う場合、getModelObject() で取ってくるものをこのメソッドを実装して返さなくてはならなくなってる!
Wicket6 は、そんなことしなくて良かったnのに。。。
実装時に第1引数=選択<select>の <option>のvalue属性が、
第2引数のリストのモデルから引っ張りだしたリストの中に存在するか探して見つかったら返してあげないとならない。見つからなければ null を返す。
Java7以下だとつらい。。。
Java8 StreamAPI で書けばなんとかスッキリする
(サンプル)
プルダウンにするオブジェクトクラス
public class Item implements Serializable{
public int id;
public String item_name;
public Item(){
}
}
IChoiceRenderer の実装
public class ItemChoiceRender implements IChoiceRenderer<Item>{
@Override
public Object getDisplayValue(Item element){
return element.item_name;
}
@Override
public String getIdValue(Item element, int index){
return Integer.toString(element.id);
}
@Override
public Item getObject(String value, IModel<? extends List<? extends Item>> model){
return model.getObject().stream().filter(e->Integer.toString(e.id).equals(value)).findFirst().orElse(null);
}
}