Control 例

以下のような実装をしたとします。

public HomePage() {
 ActionButton actionButton = new ActionButton("button","buttonLabel");
  actionButton.setListener(this, "onButtonClick");
  addControl(actionButton); 
}
public boolean onButtonClick() {
 System.out.println("ButtonPushed");
 return true;
}

ActionButtonはClickで用意してあるControllでsubmitボタンを作成します。
ここでは、ラベルにbuttonLabelと表示されるボタン(のコントロール)をbuttonという名前で登録します。また、actionButtonイベントが発生した際には、onButtonClickメソッドを呼ぶように登録してあります。
これら、イベント時のメソッド(CallBackメソッド)は引数なしで、booleanもしくはBooleanを返す必要があります。返り値がfalseの場合、onPostやらなにやらは呼ばれません。(doProcess()では、ここで登録されたLisnerのメソッドを実行し、結果を返しています。もちろん他のこともしてますが・・・)
#LisnerはListではありませんので、上書きされていきます。
画面には

$button

とすることでボタンを表示できます。

public Form form = new Form();
 
public HomePage() {
   FieldSet paymentFieldSet = new FieldSet("paymentDetails");
   form.add(paymentFieldSet);
    paymentFieldSet.add(new TextField("cardName", true));
    paymentFieldSet.add(new CreditCardField("cardNumber", true));
    IntegerField expiryField = new IntegerField("expiry", true);
    expiryField.setSize(4);
    expiryField.setMaxLength(4);
    paymentFieldSet.add(expiryField);
    form.add(new Submit("ok", "    OK    ", this, "onOkClick"));
    form.add(new Submit("  Cancel  ", this, "onCancelClick"));
}

とすると、formを作成することが出来ます。
画面では、$formとすることで表示がされます。
Formのコンストラクタで名前を指定すると、その名前でformが登録されますが、上のようにデフォルトでも作成できます。

でも・・・

というか・・publicが気持ち悪い。。。
ので、private Form form = new Form(“name”);
として、最後に、addControll(form);
としましょう。これはPageのフィールドをpublicにするのが気持ち悪い場合も同様です。となると・・・値の引継ぎなど面倒くさいことになる?

ちなみに

CreaditCardFieldはjsが同梱されていて、visaとか表示してくれます。