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);
    }
}