« 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


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

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