jueves, 7 de julio de 2011

Richfaces: verificación de errores de validación en el cliente

En algunas circunstancias es útil verificar en el cliente (generalmente un navegador) si ocurrieron errores de validación mientras se enviaba información al servidor. Un caso típico es un cuadro de diálogo modalPanel, donde probablemente se tiene un commandButton para ejecutar una acción que requiere validaciones en la información de un form; este tipo de validaciones generalmente son de tipo campos requeridos (required), formatos válidos para el tipo de dato y otros.  Se desea que el cuadro de diálogo no se cierre hasta que la operación sea exitosa o el usuario cancele el cuadro de diálogo


Para llevar a cabo esta verificación, se puede revisar los mensajes de error del contexto faces y dependiendo de los resultados obtenidos se pueden dar los siguientes casos:
  1. Si no hay mensajes de error en el contexto faces, se asume la información se ha enviado y la operación asociada se ha ejecutado satisfactoriamente.
  2. En caso contrario, se asume un error de validación, o de alguna regla de negocio que no permite ejecutar la operación requerida.
Lo anterior es sencillo y del lado del servidor puede verificarse de la siguiente manera:

FacesContext fc = FacesContext.getCurrentInstance();
boolean tieneMensajesError = fc.getMessages(null).hasNext();

if (tieneMensajesError) {
   // Realizar alguna acción si hay mensajes de error
} else {
   // Realizar alguna acción si no hay mensajes de error


¿Cómo hacer esta verificación en el cliente? JavaScript es el mecanísmo más común, usando la API de Richfaces la implementación quedaría de la siguiente forma:

<rich:modalpanel id="ejericioDlg">
 

<a4j:commandButton id="btnGuardar" action="#{algunBean.guardar}" value="Guardar" oncomplete="if (#{facesContext.maximumSeverity==null}) #{rich:component('ejercicioDlg')}.hide();"/>

<a4j:commandButton id="btnCancelar" value="Cancelar" immediate="true"> 

   <rich:componentControl for="ejercicioDlg" operation="hide" event="oncomplete" /> 
</a4j:commandButton>

</rich:modalpanel>

Con lo anterior logramos que el cuadro de diálogo solo se cierre en caso de no presentar errores de validación, que es un comportamiento comunmente deseado.

No hay comentarios:

Publicar un comentario