2
我試圖在類的級別與Bean驗證學習JSF 2.0,如下所示: -的JSR 303 Bean驗證,擴展ConstraintValidator不能使用CDI
效用
@Singleton
public class MyUtility {
public boolean isValid(final String input) {
return (input != null) || (!input.trim().equals(""));
}
}
約束註釋
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.TYPE,
ElementType.ANNOTATION_TYPE,
ElementType.FIELD
})
@Constraint(validatedBy = Validator.class)
@Documented
public @interface Validatable {
String message() default "Validation is failure";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
約束驗證
public class Validator extends ConstraintValidator<Validatable, MyBean> {
//
//----> Try to inject the utility, but it cannot as null.
//
@Inject
private MyUtility myUtil;
public void initialize(ValidatableconstraintAnnotation) {
//nothing
}
public boolean isValid(final MyBean myBean,
final ConstraintValidatorContext constraintContext) {
if (myBean == null) {
return true;
}
//
//----> Null pointer exception here.
//
return this.myUtil.isValid(myBean.getName());
}
}
的數據bean
@Validatable
public class MyBean {
private String name;
//Getter and Setter here
}
的JSF支持bean
@Named
@SessionScoped
public class Page1 {
//javax.validation.Validator
@Inject
private Validator validator;
@Inject
private MyBean myBean;
//Submit method
public void submit() {
Set<ConstraintViolation<Object>> violations =
this.validator.validate(this.myBean);
if (violations.size() > 0) {
//Handle error here.
}
}
}
運行,我所面臨的異常,因爲java.lang.NullPointerException
在該行return this.myUtil.isValid(myBean.getName());
命名爲 「驗證」 下課後。我知道CDI不會注入我的實用程序實例。如果我錯了,請糾正我。
我不確定我是否做錯了什麼,或者它是一個bean驗證限制。你能幫忙解釋一下嗎?
非常感謝您的建議。 – 2012-04-11 08:50:03
我很確定Emmanuel和EG的其他成員正在爲下一輪Bean驗證添加CDI支持。 – LightGuard 2012-04-11 16:45:12
事實上,這是BV 1.1的[主題](https://hibernate.onjira.com/browse/bval-238)。您可以在[早期草稿](http://beanvalidation.org/1.1/spec/#d0e6698)文檔中瞭解更多信息。讓我們知道您的想法。 – Gunnar 2012-04-12 20:51:01