【问题标题】:JSR303 ConstraintValidator, how to show the message without an error pageJSR303 ConstraintValidator,如何在没有错误页面的情况下显示消息
【发布时间】:2011-06-29 19:39:44
【问题描述】:

我正在使用 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;
}

PS:我知道有更简单的方法来验证字符串的长度,但上面的代码 sn-p 仅用于演示/测试目的。我对验证器有另一个计划。

【问题讨论】:

  • @BalusC:我做了第二个回答......因为在评论字段中没有足够的空间......

标签: jsf-2 java-ee-6 bean-validation


【解决方案1】:

您混合了两个概念:JSF 验证和 JSR 303 bean 验证。您正在实现 JSR303 bean 验证,但您正在抛出一个特定于 JSF 的 ValidatorException

该方法不应引发异常。该方法应该只返回truefalse,具体取决于验证结果。该消息必须在ValidationMessages.properties 中定义。然后 JSF 会将其显示在与输入组件关联的 &lt;h:message&gt; 中。

另请参阅this documentation,了解使用消息创建自定义约束。


或者,如果您实际上在使用标准 JSF 验证器,那么您应该实现 javax.faces.validator.Validator,使用 @FacesValidator 对其进行注释并通过 &lt;f:validator&gt; 在视图中声明它。它可以抛出一个ValidatorException,消息将显示在与输入组件关联的&lt;h:message&gt;中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 2023-03-05
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2023-04-06
    • 2012-11-23
    • 1970-01-01
    相关资源
    最近更新 更多