いくつかのカスタムバリデーションを作っているのですが
@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があったり、使い分けをどうすればいいのか悩んでしまう(^^;こうした学習コストは、来年度本格開発になって時間的にシビアになる状況を考えると色々不安な所です…。