2010-03-19 8 views
14

Cuando se enfrenta el problema de validar una propiedad en una aplicación JSF2 hay dos enfoques principales.Validación de frijol VS validación JSF

Definir la validación de la ManagedBean utilizando una anotación

@ManagedBean 
public class MyBean { 
    @Size(max=8) 
    private String s; 

    // Getters setters and other stuff. 
} 

o declarándola en la página JSF:

<h:inputText value="#{myBean.s}"> 
    <f:validateLength maximum="8"/> 
</h:inputText> 

sucede que no puedo decidir por ninguno de ellos. El primero es bueno porque elimina algún código de las páginas jsf (que siempre es bueno, ya que esas páginas no son muy amigables por definición), pero hace más difícil ver "de un vistazo" lo que está sucediendo con la página al verificar el archivo jsf .

¿Cuál crees que es más claro? Nicer? ¿Mejor?

Respuesta

17

Bombear para la validación en el ManagedBean, esto elimina la lógica del JSF la VISTA en el controlador de vista de modelo. y debe mantener al JSF responsable de mostrar el Modelo. Tener esto también en el bean administrado garantiza que siempre que se actualice esto se aplica la validación. Esto es más SECO (No te repitas).

+1

Todavía en la mayoría de los casos hay que repetir en la interfaz gráfica de usuario, por ejemplo, restringir maxlength o tamaño o cualquier otro valor visual a los mismos valores que se usaron en la validación. – djmj

+0

@David Waters, ambas son validación de beans y la validación de jsf ocurre en el mismo ciclo de vida o en diferentes ciclos de vida, es decir, ¿la validación de jsf ocurre antes de la validación de beans? y la validación jsf ocurre en el lado del cliente? –

+0

@MahmoudSaleh - Hola Mahmoud, ¿Puedo sugerir que su pregunta sea una pregunta, no un comentario? Obtendrá una reacción mucho mejor y respuestas de un rango mucho más amplio de personas. –

3

Richfaces le permite usarlos juntos. Ver <rich:graphValidator> (y beanValidator también).

Estas etiquetas dicen: "aplicar la validación JSF basada en reglas javax.validation (o validador Hibernate)".

+0

son ambas validación de beans y la validación de jsf ocurre en el mismo ciclo de vida o en diferentes ciclos de vida, es decir, ¿la validación de jsf ocurre antes de la validación de beans? y la validación jsf ocurre en el lado del cliente? –

4

Hay otra ventaja del enfoque managedBean. Si la información que muestra el JSF también está disponible a través de un servicio web (WS), el código de validación real se puede descomponer en una clase de validación y utilizar tanto para el JSF como para el WS asegurando que toda la información en el sistema sea válida.

0

Quizás prefiera la validación de JSF porque no puedo proporcionar mensajes de error de paquete de recursos como parte de las validaciones de bean. Por ejemplo, no puede hacer esto

@NotNull(message = ResourceBundleHelper.getString("error_message")) 

Porque "Las constantes de compilación solo pueden ser primitivas y cadenas". Hay trabajo para definir los mensajes constantes, pero se verá feo.

1

@ user1730904, puede definir mensajes en un archivo de paquete de recursos como se explica en el documento de especificación de Bean Validation. Los pasos necesarios son simples:

  1. Crear un archivo llamado ValidationMessages_xx_XX.properties en alguna carpeta de ruta de clase (por ejemplo src/main/resources/). Donde xx_XX es es_ES, en_US, etc., donde el contenido podría ser: field.message=The number of digits must be less or equal than {max}.
  2. continuación, utilizar el valor dentro de la anotación atributo de frijol: @Size(max = 20, message="{field.message}")
Cuestiones relacionadas