読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

カスタムバリデーションからでもEJB使いたい

JSF Validation Validator EJB

いくつかのカスタムバリデーションを作っているのですが

@FacesValidator(value = "hogehoge")
public class ValidateHogeHoge implements Validator{

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
       //バリデーションの処理記述
       //引っ掛かったらエラーメッセージ
    }
}

カスタムバリデーションのメッセージはDB(あるいはSingletonのEJBでキャッシュしたデータ)から取得したい流れになりました。

で、ふとEJB使えるの…?と。管理対象Beanじゃないから@Injectとか@EJBはできなさそうな…と。
ダメ元で試したけど、当然ダメでした;初心者ぽくてすみません(-_-;

情報を探してたら、やはりStackoverflowに同じ質問が。
http://stackoverflow.com/questions/6995824/a-question-about-the-design-validation-using-jsf-framework

回答は、workaroundとしてカスタムバリデーションのクラス自体を管理対象にするというものでした。

@ManagedBean(name="hoge")
@RequestScoped
@FacesValidator(value = "hogehoge")
public class ValidateHogeHoge implements Validator{

    @EJB
    private Xxxx xxxEjb;

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
       //バリデーションの処理記述
       //引っ掛かったらエラーメッセージ
    }
}

workaroundといってるのが気になる所ですが動きました。
一言にバリデーションといっても上記みたいなカスタムバリデーションがあったり、BeanValidationがあったり、使い分けをどうすればいいのか悩んでしまう(^^;こうした学習コストは、来年度本格開発になって時間的にシビアになる状況を考えると色々不安な所です…。

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村