我正在创建一个带有实现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>
答案 0 :(得分:0)
您遇到转换错误,而不是验证错误。在验证可能发生之前很久就会出现问题。这是内置的JSF String
- Integer
转换失败了。请注意,@Pattern
对Integer
属性没有意义。您无法使用任意String
值进行设置。
如果您将该属性更改为String
,那么您将看到“预期”结果。但保持Integer
当然更好,如果它真的应该代表一个数字。您可以通过converterMessage
属性,或通过提供自定义Converter
实现,或通过覆盖<message-bundle>
中的默认消息包文件来微调JSF转换器消息。