Wicketのそこそこ美しいと思われる使い方
Mapインターフェイス+PropertyModelを使うといい感じに入力値を受け取れる。
そのクラスへメソッドを実装すれば、パラメータがセットされた状態で実行できるため、きれいに見える。
CalcPage.java
public class CalcPage extends WebPage { private Form<ICalc> form = new CalcForm(); protected void onInitialize() { super.add(form); } private static class CalcForm extends Form<ICalc> { @Inject ICalc calc; private final TextField<Integer> arg1 = new TextField<Integer>("arg1", Integer.class); private final TextField<Integer> arg2 = new TextField<Integer>("arg2", Integer.class); private final TextField<Integer> result = new TextField<Integer>("result", Integer.class); private CalcForm() { super("form"); } protected void onInitialize() { this.arg1.setModel(new PropertyModel<Integer>(this.calc, "arg1"); this.arg2.setModel(new PropertyModel<Integer>(this.calc, "arg2"); this.result.setModel(new PropertyModel<Integer>(this.calc, "result"); super.add(this.arg1, this.arg2, this.result); } protected void onSubmit() { this.calc.calculate(); } private static final long serialVersionUID = 1L; } private static final long serialVersionUID = 1L; }
ICalc.java
public interface ICalc extends Map<String, Object> { void calculate(); }
CalcImpl.java
public class CalcImpl extends HashMap<String, Object> implements ICalc { public void calculate() { Integer arg1 = (Integer) super.get("arg1"); Integer arg2 = (Integer) super.get("arg2"); super.put("result", arg1 + arg2); } }