2011-09-14 34 views
4

我有一个类似的代码:JSF 2.0 validateRegex与自己的验证消息

<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> 

在背衬豆验证器产生了它自己的验证消息。但是它被inputText标签的validatorMessage覆盖。

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

感谢您的帮助:)

+1

您可以更改所有消息,但不能在应用程序中为每个组件提供特定消息。 看看这个: http://www.mkyong.com/jsf2/customize-validation-error-message-in-jsf-2-0/ – Hossein

回答

11

不能定义为每个单独的验证单独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> 

无关到具体的问题:你会是这些天准备统治世界,只要你还在验证基于电子邮件地址拉丁字符。另见Email validation using regular expression in JSF 2/PrimeFaces

+1

哇,不能设置自定义的错误信息让jsf验证少于无用!代码只是Java垃圾邮件,不值它占用硬盘空间的2个硬盘空间。 – jeremyjjbrown

+0

@jeremyjjbrown:查看答案更新。 – BalusC

+0

这实际上很有用! – jeremyjjbrown