Volviendo a los temas de JSF y Java, hoy día quisiera escribir sobre a4j (Ajax4JSF), una librería que fue integrada al framework Seam y que permite darle una naturaleza AJAX a los componentes JSF tradicionales. En este artículo centraré mi atención en un componente bastante útil denominado jsFunction.
jsFunction es un componente de soporte dentro de la librería y que es usado para poder hacer llamadas asíncronas al servidor desde cualquier código JavaScript que estemos escribiendo. Para tener un punto de referencia podemos decir que se comporta de una manera similar a la etiqueta a4j:commandButton, dado que permite realizar llamadas AJAX al servidor pero de una manera asíncrona.
Veamos un ejemplo:
<script type="text/javascript"> function validateAndSave() { if (validate()) { save('all'); } } </script> <body> <h:form> <a4j:jsFunction name="save" action="#{myBean.save()}" reRender="listPanel"> <a4j:actionParam name="param1" assignTo="#{myBean.aParameter}"/> </a4j:jsFunction> <a4j:outputPanel id="listPanel"> .... </a4j:outputPanel> </h:form> </body>
Cuando se usa a4j:jsFunction es posible iniciar la petición AJAX desde cualquier JavaScript y hacer una actualización parcial de la página o utilizar la información procesada en el JavaScript que se ejecuta de retorno.
Los siguientes escenarios son ideales para usar el componente:
- Actualizar registros del lado de la capa Modelo después de cerrar una ventana emergente (popup).
- Realizar una operación de guardado de información de manera asíncrona.
- Actualizar una variable que será utilizada luego por otro método (ojo con la llamada asíncrona).
Pueden ver un ejemplo completo en la página de demo de RichFaces. (live demo)
