フォームクラス

フィールドの自動登録

設計方針での説明の通り、 S2Clickでは org.seasar.s2click.control.S2ClickForm を継承してフォームクラスを作成することを推奨しています。

入力フィールドに対応するコントロールはフォームクラスに add() する必要がありますが、 setFieldAutoRegisteration()メソッド に true を設定しておくことで フォームクラスのpublicフィールドとして定義されたコントロールが自動的に自分自身に追加されます。

public class MessageForm extends S2ClickForm {

  public TextField name = new TextField("name", true);
  public TextField message = new TextField("message", true);
  public Submit submit = new Submit("add");

  public MessageForm(String name){
    super(name);
    setFieldAutoRegisteration(true);
    setJavaScriptValidation(true);
  }

}

フィールドのプロパティの設定

フォームに追加するコントロールのプロパティは、 通常は以下のようにフォームクラスの初期化時にsetterメソッドを呼び出して設定を行う必要があります。

public class MessageForm extends S2ClickForm {

  public TextField name = new TextField("name", true);
  public TextField message = new TextField("message", true);
  public Submit submit = new Submit("add");

  public MessageForm(String name){
    super(name);

    name.setSize(10);
    name.setMaxLength(10);

    message.setSize(40);
    message.setMaxLength(200);

    setFieldAutoRegisteration(true);
    setJavaScriptValidation(true);
  }
}

これらの設定を @Propertiesアノテーション で行うことができます。以下のコードは前述のコードとまったく同じ設定を行っていることになります。

public class MessageForm extends S2ClickForm {

  @Properties(size=10, maxLength=10)
  public TextField name = new TextField("name", true);

  @Properties(size=40, maxLength=200)
  public TextField message = new TextField("message", true);

  public Submit submit = new Submit("add");

  public MessageForm(String name){
    super(name);
    setFieldAutoRegisteration(true);
    setJavaScriptValidation(true);
  }
}

これによってコントロールのsetterメソッドを呼び出すコードをスマートにまとめることができます。 ただし、@Propertiesアノテーションはフィールドのすべてのプロパティを設定できるというわけではありません。 @Propertiesアノテーションで設定できないプロパティについては通常通りsetterメソッドを呼び出して設定する必要があります。