Validación de botones con ICEFACES en JSF
0. Índice de contenidos.
1. Introducción
Este tutorial trata de dar solución a una necesidad recurrente en la mayoría de desarrollos con JSF.
Ciertas acciones requieren de una confirmación a la hora de realizarse.
Veamos un ejemplo:
Un usuario quiere borrar un registro previamente seleccionado en un listado, pulsa sobre el botón Borrar y se muestra un mensaje de confirmación, si acepta se procede con la eliminación si cancela se vuelve al listado sin cambios.
Esta operativa no deberían requerir complejidad, y una forma sencilla y elegante de darle solución es la que te proponemos.
Mediante el componente de ICEFACES PanelConfirmation mostramos un panel directamente asociado al botón.
Una de las grandes ventajas es que dicho panel de confirmación resulta totalmente transparente para el controlador.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: MacBook Pro 15′ (2.8 GHz Intel Core 2 Duo, 4GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Snow Leopard 10.6.3.
- NVIDIA GeForce 9600M GT 512Mb.
- Toshiba 500 Gb. 5400r.p.m.
3. Descripción del componente
En ICEFACES tenemos el componente commandButton cuyo atributo panelConfirmation nos da la posiblidad de asignarle un panel de confirmación
que definimos en la propia página. Dicho panel contiene una serie de atributos que nos pemiten definir los valores de los campos del mensaje bloqueante.
Otra gran utilidad de este panelConfirmation es su total compatibildad con el atributo immediate que nos permite saltar las validaciones
de JSF.
Aquí tenemos la página del componente.
4. Ejemplo práctico
En el ejemplo planteado al comienzo de este tutorial (botón de borrado) al pular borrar realizamos una acción que no requiere la validación del formulario, ya que para eliminar un registro no debe ser necesario cumplir con las valicaciones.
En cambio un botón de guardado requiere de reafirmación y validación de los datos.
Botón de guardado con un panel de confirmación emergente, el atributo immediate por defecto toma valor «false».
<ice:commandButton id="saveButton" type="submit" value="#{msg['btn.save']}" action="#{editUser.save}" panelConfirmation="savePanelConfirmation" />
Botón de borrado con un panel de confirmación emergente.
<ice:commandButton id="deleteButton" type="submit" value="#{msg['btn.delete']}" action="#{editUser.delete}" immediate="true" panelConfirmation="deletePanelConfirmation" />
Definición de los paneles asociados a los botones anteriores.
<ice:panelConfirmation id="savePanelConfirmation" acceptLabel="#{msg['btn.yes']}" cancelLabel="#{msg['btn.no']}" title="#{msg['editUser.confirm.save.title']}" message="#{msg['editUser.confirm.save.message']}" draggable="false" />
<ice:panelConfirmation id="deletePanelConfirmation" acceptLabel="#{msg['btn.yes']}" cancelLabel="#{msg['btn.no']}" title="#{msg['editUser.confirm.delete.title']}" message="#{msg['editUser.confirm.delete.message']}" draggable="false" />
Captura del panelValidation asociado al botón de borrado.
5. Conclusiones
Tras esta breve introducción al componente, vemos lo sencillo que resulta validar acciones de forma que resulten totalmente transparentes al controlador.
Estos paneles son muy sencillos de definir y vincular a los botones, aportando internacionalización y funcionalidad extra.
Espero os sea de utilidad.
Muchísimas gracias, me sirve de mucho, pero tengo una duda no tienes los fuentes…No me queda claro si la definición de los paneles debe hacerse en el mismo archivo, voy a probar, pero aun así siempre seria importante tener los fuentes, como ejemplo de referencia.