我的代码与此类似:
<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正在显示包含正则表达式模式的自己的错误消息,依此类推 - &gt;我觉得它不太漂亮。
感谢您的帮助:)
答案 0 :(得分:12)
您无法为每个验证者定义单独的validatorMessage
。最好的办法是在自定义验证器中进行正则表达式验证,以便删除validatorMessage
。
更新:自版本1.3起,JSF实用程序库<o:validator>
的OmniFaces组件允许您基于每个验证程序设置验证程序消息。您的具体案例可以按如下方式解决:
<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 :(得分: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>