2013年3月22日金曜日

Teedaで動的にValidatorを変更(ダイナミックバリデータ)する方法

この辺ですこしハマったりなんだり面倒だったので備忘録。

やるべきことは以下のような感じ。
  1. get + <id> + Validatorでメソッドを作る。
  2. 複数のValidator使いたい場合はValidatorChainを使う。
  3. Validatorメソッドが呼ばれるのはPageクラスに値がセットされる前なのでプロパティの値を使いたい場合はjava.util.Mapなparamプロパティを用意する。 

fugaFormのbarテキストはfooに値が入っているときのみ必須とかしたい場合は以下のような感じ。

Page [hoge.html]:
<form id="fugaForm">
 <input id="foo" type="text" />
 <input id="bar" type="text" />
</form>
Pageクラス [HogePage.java]:
class HogePage {
 public String foo;
 public String bar;

 public Map param;

 public validator getBarValidator() {
  ValidatorChain validatorChain = new ValidatorChain();
  String foo = (String)param.get("fugaForm:foo");
  if (foo != null && !foo.empty()) {
   validatorChain.add(new TRequiredValidator());
  }
  TLengthValidator lengthValidator = new TLengthValidator();
  lengthValidator.setMaximumLength(...);
  validatorChain.add(lengthValidator);
  return validatorChain;
 }
}


[参考]
http://teeda.seasar.org/ja/extension/reverse/validation.html#ダイナミックバリデータを使用するには
http://d.hatena.ne.jp/Leblanc/20071122/1195702264

0 件のコメント:

コメントを投稿