使用@Pattern在Bean验证中不呈现消息

时间:2012-01-10 16:41:45

标签: jsf-2 bean-validation

我正在创建一个带有实现Bean Validation的输入字段的简单表单。所有验证都可以正常工作。问题是当用户输入非数字值时呈现的消息(或缺少呈现):

  • 如果我在Bean中使用@Pattern检查,当用户输入非数字值时,视图中不会显示警告消息。

  • 如果从Bean中删除@Pattern,当用户输入非数字值时会显示以下警告消息:

    “j_idt8:age:'some string'debe serunnúmeroentre-2147483648 y 2147483647. Ejemplo:9346”

    被翻译为:“j_idt8:age:'some string'必须是-2147483648和2147483647之间的数字。例如:9346”。

有什么我想念的吗?有没有办法实现简单的消息警告?或者无论如何都要自定义默认消息:“j_idt8:age:'some string'debe serunnúmeroentre-2147483648 y 2147483647. Ejemplo:9346”?

这些是一些代码摘录,以防你要求:

的web.xml

<context-param>
    <description>JSF will interpret empty strings submitted values as null</description>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

用户Bean:

@NotNull(message = "Please enter your age")
@Pattern(regexp = "[0-9][0-9]", message = "Age must be numeric")
@Max(99)
@Min(18)
private Integer age;

Facelets的:

<h:form>
    Enter your age:<br/>
    <h:inputText id="age" value="#{user.age}">
        <f:ajax event="blur" render="ageMessage" />
    </h:inputText>
    <h:message id="ageMessage" for="age" /><br/>

    <h:commandButton value="Insert" action="#{user.showChoice}">
        <f:ajax execute="@form" render="@form" />
    </h:commandButton>
</h:form>

1 个答案:

答案 0 :(得分:0)

您遇到转换错误,而不是验证错误。在验证可能发生之前很久就会出现问题。这是内置的JSF String - Integer转换失败了。请注意,@PatternInteger属性没有意义。您无法使用任意String值进行设置。

如果您将该属性更改为String,那么您将看到“预期”结果。但保持Integer当然更好,如果它真的应该代表一个数字。您可以通过converterMessage属性,或通过提供自定义Converter实现,或通过覆盖<message-bundle>中的默认消息包文件来微调JSF转换器消息。