eav*_*eav 0 bean-validation java-ee-6 jsf-2
我正在使用JSF 2.0和Glassfish v3.我正在测试JSR303 bean验证的功能,所以我创建了一个验证器,它实现ConstraintValidator然后在我要验证的属性上注释它.
它工作正常,但它显示Glassfish默认错误页面.我不希望这个显示,我宁愿把消息显示在一个<h:outputText>或什么的.
有谁知道如何实现这一目标?
这是我的验证方法:
@Override
public boolean isValid(String searchArg, ConstraintValidatorContext ctx) {
boolean searchArgCorrect = true;
FacesMessage msg;
if(searchArg!=null) {
ctx.disableDefaultConstraintViolation();
if(searchArg.length() < 3) {
ctx.buildConstraintViolationWithTemplate("Searcharg is too short").addConstraintViolation();
searchArgCorrect=false;
msg = new FacesMessage(
FacesMessage.SEVERITY_ERROR,
"Searcharg is too short", null);
throw new ValidatorException(msg);
}
}
return searchArgCorrect;
}
Run Code Online (Sandbox Code Playgroud)
PS:我知道有更简单的方法来验证字符串的长度,但上面的代码片段仅用于演示/测试目的.我有另一个验证器的计划.
您将两个概念混合在一起:JSF验证和JSR 303 bean验证.您正在实现JSR303 bean验证,但是您正在抛出一个特定于JSF的bean ValidatorException.
该方法不应抛出异常.该方法应该返回true或false取决于验证结果.消息必须在中定义ValidationMessages.properties.然后,JSF将在<h:message>与输入组件关联的显示中显示它.
另请参阅有关使用消息创建自定义约束的文档.
或者,如果您实际上是在使用标准的JSF验证器之后,那么您应该实现javax.faces.validator.Validator它,使用它进行注释@FacesValidator并在视图中声明它<f:validator>.它可以抛出一个ValidatorException,并且消息将显示在<h:message>与输入组件相关联的位置.
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |