2011-01-26 13 views
5

i desea mostrar el atributo de etiqueta en el mensaje:JSF inputText y 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> 

he setted la f: param porque en el

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

la {0} está sustituido con el patrón regex Mientras, yo qué mostrar el valor de la etiqueta. Mi solución no funciona, ¿cómo puedo hacerlo?

Respuesta

6

Supongo que está utilizando Mojarra, porque verificando el origen de javax.faces.validator.RegexValidator me doy cuenta de que el parámetro del mensaje de validación es solo el patrón, la etiqueta nunca pasa al formateador de mensajes y usted no puede Úselo en sus propios mensajes personalizados.

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

En las fuentes de MyFaces, parece que pasan el patrón y la etiqueta.

Existen al menos dos opciones simples: use MyFaces o mejor utilice el atributo validatorMessage de su componente de entrada.

validatorMessage descripción es Un atributo habilitado ValueExpression que, si está presente, se utilizará como el texto del mensaje del validador, reemplazando cualquier mensaje que provenga del validador.

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