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

bib*_*bek 5 jsf message

我正在尝试一个简单的JSF应用程序,我需要检查"name"字段是否为空,然后显示错误消息.

获取字段值的代码是:

<h:outputLabel value="Name"/>
<h:inputText value="#{greeting.name}" required="true">
    <f:validator validatorId="NumValidator"/>
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

如果在没有输入任何内容的情况下提交字段,则程序的控制不会进入验证器类,并且它会显示默认错误消息:

j_id_jsp_869892673_1:j_id_jsp_869892673_4:验证错误:值是必需的.

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

Rom*_*las 20

Message.properties文件存储了默认验证消息.该文件包含在JSF实现库的JAR中.

如果您查看此文件的内容,关于所需的验证,您将看到:

javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required.
Run Code Online (Sandbox Code Playgroud)

要定义自己的错误消息,请创建新的属性文件,添加适当的错误消息,例如:

javax.faces.component.UIInput.REQUIRED=Hey, you forgot to fill the input {0}!
Run Code Online (Sandbox Code Playgroud)

(注意{0}将被字段的ID替换)

然后,在你的faces-config.xml,定义一个新的message-bundle:

<message-bundle>package.that.contains.the.properties.file</message-bundle>
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果您my-messages.properties存储在foo/bar包中,则必须编写:

<application>
  ...
  <message-bundle>foo.bar.my-messages</message-bundle>
</application>
Run Code Online (Sandbox Code Playgroud)

(请注意,您不必指定.properties扩展名)