JSF 2.0使用自定义验证器消息进行validateRegex验证

5

i am having a code similar to this:

<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会显示自己的错误消息,包含正则表达式模式等等 -> 我觉得不太好看。

感谢您的帮助 :)


1
你可以更改所有的消息,但是你不能为应用程序中的每个组件设置特定的消息。 看一下这个链接: http://www.mkyong.com/jsf2/customize-validation-error-message-in-jsf-2-0/ - Hossein
2个回答

13

你无法为每个独立的验证器定义单独的validatorMessage。最好的做法是在自定义验证器中进行正则表达式验证,这样就可以删除validatorMessage


更新:自 1.3 版本以来,JSF 实用程序库 OmniFaces<o:validator> 组件允许您按照每个验证器的方式设置验证器消息。您的特定情况可以按以下方式解决:
<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>

与具体问题无关:如果你仍然基于拉丁字符验证电子邮件地址,那么在现今这个时代,你还没有准备好掌控全球。请参见JSF 2 / PrimeFaces中使用正则表达式进行电子邮件验证


1
哇,无法设置自定义错误消息使得JSF验证变得毫无用处!这段代码只是Java垃圾邮件,不值得占据我的硬盘空间。 - jeremyjjbrown
Omnifaces的解决方案对我没有起作用。按照示例操作,但仍然出现JSF验证消息。没有任何提示显示我的自定义消息... - Felix
这是自OmniFaces 1.3以来的新功能。请确保您至少拥有OmniFaces 1.3版本。 - BalusC

0

这对我有用。
您可以在“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> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接