带有自己的验证器消息的 JSF 2.0 validateRegex

Posted

技术标签:

【中文标题】带有自己的验证器消息的 JSF 2.0 validateRegex【英文标题】:JSF 2.0 validateRegex with own validator message 【发布时间】:2011-11-16 22:15:09 【问题描述】:

我有一个类似这样的代码:

<h:inputText id="email" value="#managePasswordBean.forgotPasswordEmail"
        validatorMessage="#validate['constraints.email.notValidMessage']"
        requiredMessage="#validate['constraints.email.emptyMessage']"
        validator="#managePasswordBean.validateForgotPasswordEmail"
        required="true">
    <f:validateRegex pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,6)$" />
</h:inputText>

支持 bean 中的验证器生成了自己的验证消息。但是被inputText标签的validatorMessage覆盖了。

我的问题是:如何为 validateRegex 标签定义自定义验证器消息?我不想删除 validatorMessage 原因然后 JSF 显示包含正则表达式模式等的自己的错误消息 -> 我觉得不太漂亮。

感谢您的帮助:)

【问题讨论】:

您可以更改所有消息,但不能为应用程序中的每个组件设置特定消息。看看这个:mkyong.com/jsf2/customize-validation-error-message-in-jsf-2-0 【参考方案1】:

您不能为每个单独的验证器定义单独的validatorMessage。您可以做的最好的事情是在您的自定义验证器中进行正则表达式验证,以便您可以删除 validatorMessage


更新:从 1.3 版开始,JSF 实用程序库 OmniFaces 的 &lt;o:validator&gt; 组件允许您基于每个验证器设置验证器消息。然后可以按如下方式解决您的特定情况:

<h:inputText id="email" value="#managePasswordBean.forgotPasswordEmail"
        required="true" requiredMessage="#validate['constraints.email.emptyMessage']">
    <o:validator binding="#managePasswordBean.validateForgotPasswordEmail" message="#validate['constraints.email.notValidMessage']" />
    <o:validator validatorId="javax.faces.RegularExpression" pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,6)$" message="Your new custom message here" />
</h:inputText>

与具体问题无关:如今,只要您仍然根据拉丁字符验证电子邮件地址,您就准备好统治世界。另见Email validation using regular expression in JSF 2 / PrimeFaces。

【讨论】:

哇,无法设置自定义错误消息使 jsf 验证变得毫无用处!只是 Java 垃圾邮件的代码,不值得占用我硬盘上 2 美分的硬盘空间。 Omnifaces 解决方案对我不起作用。跟随展示,但仍然有 JSF 验证消息。不是对我的自定义消息的提示... 它是自 OmniFaces 1.3 以来的新功能。确保您至少拥有 OmniFaces 1.3。【参考方案2】:

这对我有用。 您可以在“validatorMessage”中编写自定义消息

 <h:form id="form">
        <h:outputLabel for="name">Name :</h:outputLabel>  
        <h:inputText id="name" value="#editStock.name" required="true" requiredMessage="Name field must not be empty" validatorMessage="Your name can have only Alphabets">  
        <f:validateRegex pattern="^[a-zA-Z]*$" />  
        </h:inputText><br/>  
        <h:message for="name" style="color:red" />
        <h:commandButton value="Update" action="#stock.update(editStock)" style="width: 80px;"></h:commandButton> 
 </h:form> 

【讨论】:

以上是关于带有自己的验证器消息的 JSF 2.0 validateRegex的主要内容,如果未能解决你的问题,请参考以下文章

在同一个组件中使用 JSF 绑定 + 验证器显示消息两次

Java Bean Validation 2.0 Hibernate Validator - 带有外部 XML 配置的可执行 JAR

如何在 JSF 2.0 中创建自定义 404 消息?

JSF 2.0 验证码如何工作

Validator JSF 中的 EJB bean

带有 Eclipse 和 Tomcat 的 JSF 2.0 教程 [关闭]