Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

カスタムバリデーションからでも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へ
にほんブログ村