【问题标题】:Custom validation message for bean validationbean 验证的自定义验证消息
【发布时间】:2011-12-24 07:47:09
【问题描述】:

我正在创建一个 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中所述?

提前致谢!

/丹尼斯

【问题讨论】:

    标签: java jsf-2 properties bean-validation


    【解决方案1】:

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

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

    【讨论】:

    • 觉得这似乎有点可疑 :) 好的,我将 .properties 文件放在 java 根目录下,当我编译并查看 EAR 文件时,它确实出现在 WEB-INF 中。我的问题仍然存在,而不是从 .properties 文件中写入值,它只是打印密钥。 IE。它打印 {dev.User.emailAddress} 而不是“自定义无效电子邮件”。就像它不明白我想打印一个值,而不仅仅是一个字符串。想法?
    【解决方案2】:

    我将 .properties 文件放在资源文件夹中,它可以工作,无需在任何地方注册文件。作为记录:我正在使用 Netbeans 7.0.1 和 Maven。

    感谢 BalusC 的帮助!

    【讨论】:

    • 这很奇怪。您使用的是什么 bean 验证实现和/或什么 servletcontainer?
    • 我使用的是 Glassfish 3.1(与 Netbeans 捆绑)。不确定 bean 验证实现是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2014-05-31
    • 2011-10-21
    • 2014-08-15
    相关资源
    最近更新 更多