【问题标题】:No message rendered in Bean validation with @Pattern使用@Pattern 在 Bean 验证中没有呈现消息
【发布时间】:2012-01-10 16:41:44
【问题描述】:

我正在制作一个简单的表单,其中包含一个实现 Bean 验证的输入字段。所有的验证工作正常。问题是当用户输入非数值时呈现的消息(或缺少呈现):

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

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

    “j_idt8:age: 'some string' debe ser un número entre -2147483648 y 2147483647. Ejemlo: 9346”

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

我有什么遗漏吗?有没有办法实现一个简单的消息警告?或者是否有自定义默认消息:“j_idt8:age: 'some string' debe ser un número entre -2147483648 y 2147483647. Ejemlo: 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;

小脸:

<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>

【问题讨论】:

    标签: jsf-2 bean-validation


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的快速回复。我会寻找覆盖默认消息包的方法。
    • 这是密钥javax.faces.converter.IntegerConverter.INTEGER_detail。您可以在 JSF2 规范的第 2.5.2.4 章中找到它们。您可以在 JSF API JAR 文件的 javax.faces.Messages 包中找到所有默认值。
    猜你喜欢
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多