JSF 2.0和JSR 303验证之间的严重性映射

时间:2012-11-03 20:35:27

标签: jsf primefaces bean-validation

我想知道如何使用JSR 303设置严重性级别,并在JSF 2.0应用程序中显示严重性级别。现在,我只收到了两次消息。

支持bean:

@NotNull()
@Min(value = 0)
@Max(value = 1000000)
private int kilometres;

但是,在输入短信中

<p:messages id="kilometresMessages" showDetail="true" closable="true" />

消息是:

Minimum value: 0Minimum value: 0

我想要:FacesMessage.SEVERITY_INFO:最小值:0

那么如何将FacesMessage.SEVERITY_XXXX映射到我的JSR303注释中?

你能帮帮我吗?

祝你好运

2 个答案:

答案 0 :(得分:2)

在JSR303中,注释存在可以使用的有效负载属性。

public final class Severity {

    public static class Error implements Payload {
    }

    public static class Warning implements Payload {
    }

    public static class Info implements Payload {
    }

    private Severity() {

    }
}

然后你可以定义你的JSR303 annotations,如

@NotNull()
@Min.List({
    @Min(value = 0, payload={Severity.Info.class}),
    @Min(value = -20, payload={Severity.Error.class})
})
@Max(value = 1000000)
private int kilometres;    

验证后,相应的ConstraintViolation对象包含有效负载。

Set<Class<? extends Payload>> payload = ConstraintViolation.getConstraintDescriptor().getPayload();

之后,您必须将constraintViolations转换为您想要显示的相应消息。由于我不是JSF专家,我不得不跳过这部分问题。

答案 1 :(得分:0)

令人遗憾的是,JSR 2.03 / JSR349(Bean Validation API)消息始终是JSF 2.0-2.2中的错误消息。严重性是一个常数 - 见javax.faces.validator.MessageFactory的第214行。