【问题标题】:JSF custom message for validation error验证错误的 JSF 自定义消息
【发布时间】:2013-04-08 12:47:11
【问题描述】:

我正在使用 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 是我的 var来自资源包定义。

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

重要提示:此处提供的解决方案 Mkyong.com 效果不佳。

注意:我声明使用 JSF 2.0,Glassfish 3.1.2.2 肯定支持这一点。 注意:我不想在托管 bean 中实现验证,而不是使用 JSF 验证/Bean 验证。

【问题讨论】:

  • 你使用的是 jsf 1.X,不是吗?
  • Mkyong 解决方案在 glassfish 3.1.2.2 上为我开箱即用(提供 zip)
  • @gpilotino 我刚刚再次下载了 Mkyong 示例。当您不输入任何数据并单击“提交”时,会出现以下错误消息:1) 用户名:验证错误:需要值。 2) 出生日期:验证错误:值是必需的。 我希望这些消息是自定义的,例如“xyz”。 我在 MyMessages.properties 中添加了 javax.faces.validator.BeanValidator.MESSAGE=xyz 行,但没有任何改变
  • 我在回答自己:要为所需的验证设置自定义消息,您需要在 message-bundle 中设置 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 不是这样负责提供必填字段错误消息。

标签: validation jsf glassfish-3


【解决方案1】:

我在回答自己:要为必填字段验证设置自定义消息,您需要在消息包文件中设置以下属性(消息包在 faces-config.xml 中由 标签定义):

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 时显示的消息。如果您在 h:message/h:messages 中显示摘要,请另外设置。

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

【讨论】:

    【解决方案2】:

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

    FacesContext ctx = FacesContext.getCurrentInstance();
    FacesMessage msg =new FacesMessage(FacesMessage.SEVERITY_INFO, errorMessage,detailMessage);
    ctx.addMessage(null, msg);
    

    【讨论】:

    • 这不是我问的。当然,我使用 h:message 标记,并且查看验证消息没有问题。
    • 此外,我不想自己实现验证并在我的托管 bean 中创建 FacesMessage 对象。
    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2016-04-18
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多