martes, 12 de marzo de 2013

Liferay - actionURL, renderURL y resourceURL

Quienes han trabajado con Liferay saben de sobra que, al menos al principio, no es un camino de rosas. Ofrece tantas posibilidades que, en ocasiones, esto hace que uno no sepa cuáles elegir si nadie les guía un poco.

Para quien no sepa qué es Liferay, aquí dejo un enlace que explica, en términos generales, qué nos ofrece esta herramienta. Como la mayoría de la buena documentación, está en inglés, pero, ¿qué mejor explicación y guía que aquellas hechas por los propios creadores?

Probablemente acabe escribiendo una gran cantidad de entradas sobre esta herramienta, pero me parece conveniente comenzar con una aclaración de conceptos sobre tres elementos que podremos utilizar en nuestros ficheros JSP y que nos abrirán un sin fin de posibilidades. Hablamos de actionURL, renderURL y resourceURL.

actionURL

Este tag crea una URL que, al asociarse a un enlace HTML (tag <a>), permite la ejecución de un método definido la clase principal de nuestro portlet (aquella que hereda de la clase MVCPortlet) sin que se recargue la página en el navegador. 

Para hacer uso de esta herramienta, se debe añadir en nuestro código JSP el siguiente tag:

<liferay-portlet:actionURL name="metodoPortlet"></liferay-portlet:actionURL>

Esta URL se enlazará con el tag <a> de la siguiente forma: (esto es igual en los tres casos de los que se habla en esta entrada)

<a href="<%=metodoPortlet.toString()%>" /> Haz click aquí </a>

En la clase principal de nuestro portlet tendrá que encontrarse un método público con el mismo portlet que la URL (en este caso, metodoPortlet), el cual será llamado al hacer uso del enlace.

Es posible crear tantos pares de actionURL y métodos como sean necesarios, permitiendo, por ejemplo, la carga y muestra de datos al hacer click en un botón.

renderURL

Este tag ofrece dos posibilidades en función de si en su interior definimos o no un parámetro llamado "jspPage", cuyo valor debe ser la ruta de un fichero JSP.

Si no lo definimos, esta URL nos permitirá, al hacer click en un enlace, se vuelva a ejecutar el método doView() de nuestro portlet, heredado de la clase MVCPortlet, sin necesidad de recargar la página. Para ello, definiremos la URL de la siguiente manera, pudiendo añadir parámetros que se pasarán en método GET:

<liferay-portlet:renderURL var="testRenderURL">
</liferay-portlet:renderURL>
Si definimos el parámetro "jspPage", el funcionamiento será similar, pero cargará el fichero JSP al igual que el método include(). Se definirá, en este caso, del siguiente modo:

<liferay-portlet:renderURL var="testRenderURL">    <liferay-portlet:param name="jspPage" value="/html/portlet/test/test.jsp"/></liferay-portlet:renderURL> 

resourceURL

El funcionamiento de este tag es bastante similar al anterior, con dos excepcione. La primera es que en lugar de ejecutar el método doView(), ejecuta el método serverResource(), que es el recomendado para, por ejemplo, la carga de documentos PDF para visualizarlos en el navegador, entre muchos otros usos.

La segunda diferencia se debe a que no se recomienda cargar ficheros JSP en el método serverResource(), aunque es posible, por lo que no procesa automáticamente el fichero indicado en el parámetro "jspPage" (o, al menos, yo no he encontrado ningún ejemplo en el que ocurra así).

Este tag se define de la siguiente manera:

<portlet:resourceURL var="someUrl" id="veryImportantResource'" ></portlet:resourceURL>

Espero que tras leer esta entrada, al menos se entienda para qué sirve cada una de estas URLs. El resto ya es cuestión de imaginación. Seguro que con un poco de ingenio podréis sacarle un gran partido a estas tres herramientas con miles de posibilidades.

1 comentario:

  1. Excelente post,

    Pero me queda una duda, desde hace dias quiero poner una referencia a un renderPortlet desde un href. Ejemplo:





    Link2

    Sin embargo, esto no funciona, no me redireccion a mi edit.jsp.

    Tienes alguna sugerencia?

    ResponderEliminar