読者です 読者をやめる 読者になる 読者になる

Wicket7 の IChoiceRenderer

Wicket7 では、IChoiceRenderer の実装しなくてはならないメソッド増えている!

public T getObject(String id, IModel<? extends List<? extends T>> choices)

DropDownChoiceIChoiceRenderer を使う場合、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);
   }
}