« Seasar2でConnectionPoolの情報取得 | Main | Teedaでログアウト »

2007.07.28

Teedaのカスタムバリデータ

 Teedaで使用するカスタムValidatorの作成のテスト。参考にしたのはValidatorのカスタマイズについてのページなのですが・・・Validationロジックは具体的にはどのように書けば? ってことで、Teedaのソースを参考にしながら作成してみました。

public class SampleValidator implements Validator {
 public void validate(FacesContext context, UIComponent component, Object value) throws FacesException {
  if (value == null || value.equals("")) return;
  if (!checklogic(value)) {
   FacesMessage message = new FacesMessage("入力内容を確認してください");
   throw new ValidatorException(message);
  }
 }
 public boolean checklogic(Object value) {
  // 何らかのチェックロジック
 }
}

 とりあえず、入力コンポーネント等は無視して、値の内容だけでチェックするサンプルバリデータです。最初、throws FacesExceptionとなっているので、throw new FacesException("message");ってやっていたのですが、その場合Teedaのエラーページの画面に遷移してしました(笑)。どうやら、FacesExceptionを継承したValidatorExceptionをスローする必要があるようです。
 この場合、引数としてはStringは直接渡すことが出来ず、FacesMessageを構築してから行う必要があります。今回は直接テキストを記入していますが、実際にはリソースファイルからメッセージを取得することになるかと思います。

 で、アノテーションでこのバリデータを使用できるようにするため、アノテーションを1つ作成。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Validator("sampleValidator")
public @interface Sample {
}

 Validatorアノテーション内で指定するコンポーネント名は、SMART deployで適用されたValidator(rootpackagename.validatorパッケージで、クラス名の末尾がValidatorで終わるクラス)ならクラス名の先頭1文字を小文字にしたものとなります。

 あとは、Pageクラスで、このアノテーションを適用したいフィールドの宣言のところに@Sampleアノテーションを指定すれば、SampleValidatorが呼び出されることとなります。ラクチンですね(^^)。

|

« Seasar2でConnectionPoolの情報取得 | Main | Teedaでログアウト »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/15930318

Listed below are links to weblogs that reference Teedaのカスタムバリデータ:

« Seasar2でConnectionPoolの情報取得 | Main | Teedaでログアウト »