2011-01-26 74 views
5

我想顯示在消息中的標籤屬性:JSF的inputText和validateRegexPatter

<h:inputText id="email" label="#{sW.email}" value="#{contattiBean.contatto.email}" 
           required="true"> 
       <f:param value="#{sW.email}" /> 
       <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/> 
    </h:inputText> 

我已經設置好的所述F:PARAM因爲在

`javax.faces.validator.RegexValidator.NOT_MATCHED={0}: Valore non valido` 

的與取代的{0}正則表達式模式。 雖然,我該如何顯示標籤值。 我的解決方案無法正常工作,我該怎麼辦?

回答

6

我想你使用的是Mojarra,因爲檢查了javax.faces.validator.RegexValidator的來源我注意到驗證消息的參數只是模式,標籤永遠不會傳遞給消息格式化程序,也不能在您自己的自定義消息中使用它。

//From javax.faces.validator.RegexValidator source 
if (!matcher.matches()) { 
    Object[] params = { regex }; 
    fmsg = MessageFactory.getMessage(locale, NOT_MATCHED_MESSAGE_ID, params); 
    throw new ValidatorException(fmsg); 
} 

在MyFaces源代碼中,似乎它們傳遞了模式和標籤。

至少有兩個簡單選項:使用MyFaces或更好地使用輸入組件的validatorMessage屬性。

驗證器消息描述爲啓用ValueExpression的屬性,如果存在,將用作驗證器消息的文本,替換來自驗證器的任何消息。

<h:inputText id="email" label="#{sW.email}" 
     value="#{contattiBean.contatto.email}" 
     required="true" validatorMessage="#{sW.email} is not valid"> 
      <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]"/> 
</h:inputText>