2010-03-25 16 views
5

Estaba probando una aplicación JSF simple, en la que necesito verificar si el campo "nombre" está en blanco, y luego mostrar un mensaje de error.Mostrar mensaje de error personalizado para un campo en blanco en una aplicación JSF simple

El código que toma el valor del campo es:

<h:outputLabel value="Name"/> 
<h:inputText value="#{greeting.name}" required="true"> 
    <f:validator validatorId="NumValidator"/> 
</h:inputText> 

El control del programa no entra en la clase de validación, si el campo se presenta sin introducir nada, y se muestra el mensaje de error por defecto:

j_id_jsp_869892673_1: j_id_jsp_869892673_4: Error de validación: se requiere valor.

¿Cómo visualizo un mensaje personalizado para esto?

+6

Tenga en cuenta que cuando ** realmente ** desea anular ese 'j_id_jsp_869892673_1: j_id_jsp_869892673_4' feo, entonces debe especificar el atributo' label' del elemento 'UIInput', p. Ej. ''. – BalusC

+0

@BalusC: gracias. quería deshacerse de ese feo j_id_jsp_869892673_1: j_id_jsp_869892673_4 – bibek

Respuesta

20

El archivo Message.properties almacenó los mensajes de validación predeterminados. Este archivo está contenido en el JAR de la biblioteca de implementación de JSF.

Si nos fijamos en el contenido de este archivo, con respecto a la necesaria la validación, se verá que:

javax.faces.component.UIInput.REQUIRED={0}: Validation Error: Value is required. 

para definir sus propios mensajes de error, cree un nuevo archivo de propiedades, añadir el error adecuada mensaje, por ejemplo:

javax.faces.component.UIInput.REQUIRED=Hey, you forgot to fill the input {0}! 

(tenga en cuenta que {0} se sustituye por el ID del campo)

entonces, en su faces-config.xml, definir un nuevo message-bundle:

<message-bundle>package.that.contains.the.properties.file</message-bundle> 

Así, por ejemplo, si su my-messages.properties se almacena en el paquete foo/bar, que tendrá que escribir:

<application> 
    ... 
    <message-bundle>foo.bar.my-messages</message-bundle> 
</application> 

(nota que no tendrá que especificar la extensión .properties)

2

El camino sugerido por romaintaz es definitivamente el camino a seguir. Por otro lado, si está buscando más personalización, puede utilizar listene de fase r que se dispara antes de la fase de respuesta de procesamiento, como lo hace con algunas personalizaciones.

Por ejemplo definir primero el valor de la clave de la siguiente manera:

javax.faces.component.UIInput.REQUIRED=INPUT_REQ_FAIL 

entonces para componentes de entrada que requieren validación han ellos pasar un atributo usando f: atributo .A continuación, en iterate oyente fase sobre los mensajes de la cara y de verificación para INPUT_REQ_FAIL y reemplazarlo por un mensaje cutom junto con el valor del atributo para el componente.

-1

¡Creo que deberías mirar a JSR 303! Esta es una entrada de usuario totalmente estándar, funciona de manera inmediata con JSF 2 (uso My Faces). Y lo bueno es que no es necesario que los archivos xml o de propiedades especifiquen mensajes personalizados.

Cuestiones relacionadas