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

AjaxEventBehavior スクロール もラムダで。

Wicket8 ビヘビアもラムダの恩恵が沢山あるだろう。

Wicket 7 で、SerializableConsumer が無かったおかげで例えば、AjaxEventBehavior で スクロールイベントの処理は
以下のようなクラスを用意して、

import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.danekja.java.util.function.serializable.SerializableConsumer;

/**
 * スクロール時の AjaxEventBehavior.
 */
public abstract class AjaxScrollEventBehavior extends AjaxEventBehavior{

   protected abstract void onScroll(AjaxRequestTarget target);

   public AjaxScrollEventBehavior(){
      super("scroll");
   }

   @Override
   protected void onEvent(AjaxRequestTarget target){
      onScroll(target);
   }
}

リストのスクロールに対して

listcontainer.add(new AjaxScrollEventBehavior(){
   @Override
   protected void onScroll(AjaxRequestTarget target){
      // 処理
   }
});

と書いていた。

Wicket8 で SerializableConsumer を使い、この AjaxScrollEventBehavior に、更に以下の
private コンストラクタと、static メソッドを用意すれば、ラムダが使える。

private AjaxScrollEventBehavior(String event){
   super(event);
}

public static AjaxScrollEventBehavior onScroll(SerializableConsumer<AjaxRequestTarget> c){
   return new AjaxScrollEventBehavior("scroll"){
      private static final long serialVersionUID = 1L;
      @Override
      protected void onScroll(AjaxRequestTarget target){
         c.accept(target);
      }
   };
}

たかが、2,3行の削減ではないかと言うかもしれないが、たくさん出現するとやはり、かさ張ってきて見づらくなる。

listcontainer.add(AjaxScrollEventBehavior.onScroll(t->{
    // 処理
});