2011-01-26 16 views
5

voglio visualizzare l'attributo label nel messaggio:JSF inputText e 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> 

ho impostato la f: param perché nel

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

il {0} viene sostituito con il modello regex. Mentre, i cosa visualizzare il valore dell'etichetta. La mia soluzione non funziona come posso farlo?

risposta

6

Suppongo che si stia utilizzando Mojarra, perché si verifica l'origine di javax.faces.validator.RegexValidator. Notiamo che il parametro del messaggio di convalida è solo il modello, l'etichetta non viene mai passata al formattatore del messaggio e non è possibile usalo nei tuoi messaggi personalizzati.

//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); 
} 

Nelle origini MyFaces, sembra che passino sia il modello che l'etichetta.

Esistono almeno due opzioni semplici: utilizzare MyFaces o utilizzare l'attributo validatorMessage del componente di input.

descrizione validatorMessage è Un ValueExpression attributo enabled che, se presente, verrà utilizzato come il testo del messaggio di convalida, sostituendo qualsiasi messaggio che proviene dal validatore.

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