2011-03-04 16 views
11

Tengo una página de formulario que tiene un campo de entrada de texto que acepta una fecha. Tenemos un convertidor que convierte la cadena del cuadro de texto en un objeto Date (es decir, "2011-03-01" a java.util.Date ("2011-03-01" "))Variables personalizadas en el mensaje de error del convertidor JSF

Si la cadena es . no es una cita, como "123", entonces un mensaje de error de validación se mostrará como "valor (123) debe ser una fecha"

Actualmente, en mi archivo .properties, veo:

javax .faces.converter.DateTimeConverter.DATE = valor ({0}) debe ser una fecha

Necesito hacer que este mensaje de error sea más claro al especificar exactamente qué campo debe ser una fecha. (Como podría haber más de un campo de texto de fecha en el formulario).

me gustaría cambiarlo a algo como:

javax.faces.converter.DateTimeConverter.DATE = El campo "{0}" con un valor ({1}) debe ser una fecha

Sin embargo, no estoy seguro de cómo JSF completa automáticamente el {0} y {1}. ¿Cómo especifico mis propias variables dentro del mensaje de error del convertidor JSF?

Nota: He intentado crear mi propio validador (no debe confundirse con el convertidor) pero parece que el marco JSF realiza la conversión antes de la validación en su ciclo de vida.

Respuesta

17

A partir de JSF 1.2, utilice el atributo converterMessage para reemplazar todo el mensaje, tales como:

<h:inputText value="#{user.dateOfBirth}" converterMessage="Format must be: yyyy-MM-dd"> 
    <f:convertDateTime pattern="yyyy-MM-dd" /> 
</h:inputText> 

De lo contrario, JSF por defecto muestra el mensaje _detail en el <h:message>. Solo cuando use <h:message showDetail="false" showSummary="true">, se mostrará el similar a su pregunta. No estoy seguro de qué versión JSF que está utilizando, pero en mi JSF 2.0.3 del default detail message para f:convertDateTime es la siguiente:

javax.faces.converter.DateTimeConverter.DATE_detail = {2}: ''{0}'' could not be understood as a date. Example: {1} 

El {2} será sustituido con el ID de cliente o el atributo de la label campo de entrada cuando está presente.

<h:inputText value="#{user.dateOfBirth}" label="Date of birth"> 
    <f:convertDateTime pattern="yyyy-MM-dd" /> 
</h:inputText> 

Tanto el mensaje de DATE y DATE_detail debe estar definido para el mensaje DATE_detail a utilizar:

javax.faces.converter.DateTimeConverter.DATE=Date format must be: dd/mm/yyyy 
javax.faces.converter.DateTimeConverter.DATE_detail=Date format must be: dd/mm/yyyy 

Ver también:

Cuestiones relacionadas