2011-09-14 33 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