用于bean验证的自定义验证消息

时间:2011-11-08 10:04:36

标签: java jsf-2 properties bean-validation

我正在创建一个JSF 2应用程序,我正在尝试在bean中使用表单验证而不是faces-page。我还想使用.properties文件来存储消息。

我看了this question,但我认为我没有正确设置属性文件。

假设我在名为'dev'的程序包中有一个名为User的bean:

@ManagedBean
@SessionScoped
public class User implements Serializable {

    @Pattern(pattern=".+@.+\\.[a-z]+", message="{dev.User.emailAddress}")
    private String emailAddress;

    // getter/setter
}

我还在WEB-INF / classes中创建了一个'ValidationMessages.properties'文件(我正在使用Netbeans 7.0.1)

在ValidationMessages.properties文件中,我有这个键/值行:

dev.User.emailAddress=Custom invalid email message

我的观点(user.xhtml)如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>User registration</title>
</h:head>
<h:body>
    <h:form>
        <h:inputText id="emailAddress" value="#{user.emailAddress}" required="true" />
        <h:message for="emailAddress" />
        <h:commandButton value="Ok" action="null" />
    </h:form>
</h:body>

当我输入无效的电子邮件并按下按钮时,网页中的验证消息显示为:

{dev.User.emailAddress}

而不是

Custom invalid email message

问题可能是我没有在web.xml中注册我的属性文件吗?

我也应该在bean中将required =“true”切换为@NotNull。除了插入此内容之外,还有什么需要做的:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

BalusC's blog

中所述

提前致谢!

/丹尼斯

2 个答案:

答案 0 :(得分:3)

  

我还在WEB-INF / classes中创建了一个文件'ValidationMessages.properties'(我正在使用Netbeans 7.0.1)

我知道你自己直接把它放在了项目的/WEB-INF/classes文件夹中?如果让IDE构建/部署WAR,这可能会被忽略/覆盖(至少对Eclipse来说是这样)。您应该将该文件直接放在项目的Java源文件夹的根目录中。在将项目导出到WAR文件然后使用某些ZIP工具提取之后,您可以验证自己是否真的在/WEB-INF/classes中结束。

答案 1 :(得分:2)

我将.properties文件放在resources文件夹中并且工作正常,无需在任何地方注册该文件。记录:我正在使用Netbeans 7.0.1和Maven。

感谢你的帮助,BalusC!