Las fases Action y Render de la ejecución de un portlet


Muy buenas, en esta entrada explicaré las dos fases de ejecución que puede tener un portlet dentro del portal de Liferay.

Para aclarar el porqué Liferay está hecho así, primero debemos tener en cuenta que en una página de un portal de Liferay podemos tener incrustados diferentes portlets. Cada portlet lo podemos entender como una aplicación que hace cualquier funcionalidad y devuelve un código html que se acopla en dicha página.

En este sentido tendremos la fase de Render, esta fase la harán todos los portlets de la página. Incluye la funcionalidad para mostrar contenido al usuario según su estado (VIEW o EDIT entre otros).

Nota: Liferay permite especificar una prioridad de renderización en los portlets a través de render-weight en el archivo liferay-portlet.xml. Los portlets con un peso mayor serán renderizados antes.

Por otra parte, tenemos la fase Action. Esta fase incluye la acción que hace un usuario con un portlet, por lo que el portal solo procesa una acción a la vez. Una acción de un portlet puede ser cualquier petición a éste, como cambiar el estado o un cambio en la base de datos (Por ejemplo, si es un portlet publicador de noticias, añadir una noticia).

Podemos ver que las fases han de ser secuenciales: primero, si es necesario, se ejecuta la acción de un portlet y esta acción quizás modifica algún dato o comportamiento. Una vez hecho esto, empieza la fase de renderizar que hacen todos los portlets, incluyendo al que se le ha hecho la acción (Imágen 1).

Untitled.png

Imágen 1

Para ilustrar el funcionamiento, he añadido en una página prueba unos cuantos portlets: Camino de migas, Idiomas, Documentos y multimedia y un Visor de contenido web.

Cuando accedo a la página mediante la url ‘localhost:8080/web/prueba/welcome’ sólo se ejecuta la fase Render para todos los portlets que devuelve el código html para ver la página (Imágen 2).

image4.png

Imágen 2

Como usuario quiero añadir una carpeta usando el portlet de ‘Documentos y multimedia‘, es decir, quiero realizar una acción sobre un portlet (Imágen 3).

image5.png

Imágen 3

Como vemos esta acción ha hecho que se cargue de nuevo la página. Me gustaría destacar dos cosas: primero, la url se ha modificado y ha añadido muchos parámetros (‘localhost:8080/web/prueba/welcome?p_p_id=….’). Así es como el servidor recoge la petición de la acción. La segunda es que si nos fijamos en los portlets siguen igual exceptuando ‘Documentos y multimedia‘ (Imágen 4).

image6.png

Imágen 4

¿Qué ha pasado? Pues que la Action ha cambiado el estado del portlet para ver la vista de añadir carpeta. Así en la fase de Render los demás portlets muestran lo mismo y el de ‘Documentos y multimedia‘ muestra un contenido diferente.

Sería otra acción añadir una carpeta nueva a ‘Documentos y multimedia‘ y tendría el mismo procedimiento antes descrito.

Como hemos visto las url son importantes, para las fases de ejecución. A nivel de código podemos ver estas tres destacadas:

  • renderURL: sirve para mostrar un portlet usando solo la fase Render.
  • actionURL: sirve para indicar a un portlet que ha de ejecutar una acción antes de llegar a la fase Render.
  • resourceURL: sirve para obtener imágenes, XML o JSON entre otros. Es útil para hacer llamadas AJAX al servidor.

Fuentes:

https://dev.liferay.com/develop/tutorials/-/knowledge_base/6-1/understanding-the-two-phases-of-portlet-execution
http://www.liferay.com/es/community/forums/-/message_boards/message/43914750

Saludos,


Leave a Reply

Your email address will not be published. Required fields are marked *