我正在尝试一个简单的JSF应用程序,我需要检查“name”字段是否为空,然后显示错误消息。
获取字段值的代码是:
<h:outputLabel value="Name"/>
<h:inputText value="#{greeting.name}" required="true">
<f:validator validatorId="NumValidator"/>
</h:inputText>
如果在未输入任何内容的情况下提交字段,则程序的控制权不会进入验证程序类,并显示默认错误消息:
j_id_jsp_869892673_1:j_id_jsp_869892673_4:验证错误:值是必需的。
如何为此显示自定义消息?
答案 0 :(得分:20)
Message.properties
文件存储了默认验证消息。该文件包含在JSF实现库的JAR中。
如果你看一下这个文件的内容,关于必需的验证,你会看到:
javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
要定义自己的错误消息,请创建新的属性文件,添加适当的错误消息,例如:
javax.faces.component.UIInput.REQUIRED=Hey, you forgot to fill the input {0}!
(请注意,{0}
将替换为字段的ID)
然后,在faces-config.xml
中,定义一个新的message-bundle
:
<message-bundle>package.that.contains.the.properties.file</message-bundle>
例如,如果您的my-messages.properties
存储在foo / bar包中,则必须写:
<application>
...
<message-bundle>foo.bar.my-messages</message-bundle>
</application>
(请注意,您无需指定.properties
分机号)
答案 1 :(得分:2)
romaintaz 建议的方式绝对可行。 另一方面,如果您正在寻找更多自定义,您可以使用在渲染响应阶段之前触发的阶段侦听 r,以及一些自定义。
例如,首先定义key的值,如下所示:
javax.faces.component.UIInput.REQUIRED=INPUT_REQ_FAIL
然后对于需要验证的输入组件,他们使用f:attribute传递属性。然后在阶段监听器中迭代面部消息并检查INPUT_REQ_FAIL并将其替换为cutom消息以及组件的属性值。