Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于bean验证的自定义验证消息_Java_Jsf 2_Properties_Bean Validation - Fatal编程技术网

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

Java 用于bean验证的自定义验证消息,java,jsf-2,properties,bean-validation,Java,Jsf 2,Properties,Bean Validation,我正在创建一个JSF2应用程序,并尝试在bean中使用表单验证,而不是faces页面。我还想使用.properties文件来存储消息 我查看了,但我认为我没有正确设置属性文件 假设我在一个名为“dev”的包中有一个名为User的bean: @ManagedBean @SessionScoped public class User implements Serializable { @Pattern(pattern=".+@.+\\.[a-z]+", message="{dev.User

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

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

假设我在一个名为“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>
而不是

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>

javax.faces.explait_EMPTY_STRING_SUBMITTED_VALUES_为_NULL
真的
如中所述

提前谢谢

/丹尼斯

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


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

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


谢谢你的帮助,巴卢斯克

我觉得这似乎有点可疑:)好吧,我把.properties文件放在java根目录下,当我编译并查看EAR文件时,它确实会在WEB-INF中结束。但是我的问题仍然存在,它不是从.properties文件中写入值,而是打印密钥。即,它打印{dev.User.emailAddress}而不是“自定义无效电子邮件”。它好像不明白我想打印一个值,而不仅仅是一个字符串。想法?真奇怪。您使用的是什么bean验证实现和/或servletcontainer?我使用的是GlassFish3.1(与Netbeans捆绑在一起)。不确定bean验证实现是什么意思?
<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>