Validación de acciones sobre botones en Jsf con Icefaces

1
14896

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:

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.

1 COMENTARIO

  1. 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.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad