Wicket の 簡単な記述で実現してみたくなりました。
Wicket 8 を使います。
org.apache.wicket.markup.html.link.Link を継承したクラスで作ります。
どんな名称にしたら良いか悩みましたが、センス無いとは思いましたが、
もういっそのこと、そのまんま、 Click ... Link ... bind というキーワードで以下を作成
package org.yipuran.wicketcustom; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.util.lang.Args; import org.danekja.java.util.function.serializable.SerializableConsumer; /** * リンク click → シリアライズ化した Consumer の実行. */ public abstract class ClickLink<T> extends Link<T>{ /** * private コンストラクタ. * @param コンポーネントID */ private ClickLink(String id){ super(id); } /** * コンポーネントID→シリアライズ Consumer 設定コンポーネント生成. * @param id component ID * @param onClick SerializableConsumer<String> parameter is component ID * @return ClickLink */ public static <T> ClickLink<T> bind(String id, SerializableConsumer<String> onClick){ Args.notNull(onClick, "onClick"); return new ClickLink<T>(id){ private static final long serialVersionUID = 1L; @Override public void onClick(){ onClick.accept(id); } }; } }
使い方のサンプル、、、
<a wicket:id="back" href="#">HomePage にもどる</a>
に対して、、
queue(ClickLink.bind("back", t->setResponsePage(HomePage.class)));