Validation 验证错误的JSF自定义消息

Validation 验证错误的JSF自定义消息,validation,jsf,glassfish-3,Validation,Jsf,Glassfish 3,我正在使用GlassFish 3.1.2.2,我想定义一个通用验证消息模板,使其不包含字段标识符/标签 我在StackOverflow上找到了两个相关的主题,但是这些解决方案(都涉及javax.faces.validator.BeanValidator.MESSAGE)都不起作用 1) 将ValidationMessages.properties放在类路径的根目录中(在我的例子中,它放在WAR文件的WEB-INF/classes中)——没有效果 2) 在faces-config.xml中定义Va

我正在使用GlassFish 3.1.2.2,我想定义一个通用验证消息模板,使其不包含字段标识符/标签

我在StackOverflow上找到了两个相关的主题,但是这些解决方案(都涉及javax.faces.validator.BeanValidator.MESSAGE)都不起作用

1) 将ValidationMessages.properties放在类路径的根目录中(在我的例子中,它放在WAR文件的WEB-INF/classes中)——没有效果

2) 在faces-config.xml中定义ValidationMessages.properties文件-无效

3) 在faces-config.xml中定义ValidationMessages.properties文件-无效

我测试了资源包是否正常工作,因为我可以在EL中使用它,例如:#{text['javax.faces.validator.BeanValidator.MESSAGE']},其中text是来自资源包定义的变量

注意:我不想在应用程序中的每个输入字段上都指定validatorMessage属性。我只想为整个应用程序设置一次自定义消息

重要提示:此处提供的解决方案不起作用

注意:我声明使用JSF2.0和Glassfish 3.1.2.2当然支持这一点。 注意:我不想在托管bean中实现验证,而不是使用JSF验证/bean验证。

在jsp/xhtml中添加
并根据条件显示来自托管Bean的错误消息 使用


我回答自己:要设置自定义消息以进行所需的字段验证,您需要在消息包文件中设置以下属性(消息包在faces-config.xml中通过标记定义):

1) javax.faces.component.UIInput.REQUIRED\u detail-默认情况下以h:message或h:messages标记显示的消息-或当showdeail=true时(默认情况下)。一般来说就够了

2) javax.faces.component.UIInput.REQUIRED-在h:message和h:messages标记中当showSummary=true时显示的消息。如果在h:message/h:messages中显示摘要,则另外设置此选项


注意:javax.faces.validator.BeanValidator.MESSAGE对必需的字段错误消息负责,这不是真的。

您使用的是jsf 1.X,不是吗?Mkyong解决方案在glassfish 3.1.2上对我来说是开箱即用的(提供了zip)。2@gpilotino我刚刚又下载了一个样本。当您未输入任何数据并单击“提交”时,将显示以下错误消息:1)用户名:验证错误:需要值。2) 出生日期:验证错误:需要值。我希望这些消息是自定义的,例如“xyz”。我在MyMessages.properties中添加了javax.faces.validator.BeanValidator.MESSAGE=xyz行,没有任何更改。我回答自己:要为所需验证设置自定义消息,您需要在消息包1)javax.faces.component.UIInput.required_detail-默认情况下在h:MESSAGE或h:messages标记中显示的消息-或当showDetail=true(默认情况下)2)javax.faces.component.UIInput.REQUIRED-当h:message和h:messages标记中的showSummary=true时显示的消息注意:javax.faces.validator.BeanValidator.message对所需字段错误消息负责,这不是我所要求的。当然,我使用h:message标记,并且我在查看验证消息时没有问题。此外,我不想自己实现验证,也不想在我的托管bean中创建FacesMessage对象。
FacesContext ctx = FacesContext.getCurrentInstance();
FacesMessage msg =new FacesMessage(FacesMessage.SEVERITY_INFO, errorMessage,detailMessage);
ctx.addMessage(null, msg);