在简单的JSF应用程序中显示空白字段的自定义错误消息

时间:2010-03-25 09:08:48

标签: jsf message

我正在尝试一个简单的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:验证错误:值是必需的。

如何为此显示自定义消息?

2 个答案:

答案 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消息以及组件的属性值。