Liferay 7.2. Navegando entre páginas

Como en toda página web es necesario conocer cómo navegar entre páginas. Naturalmente usaremos un tag a, pero un portlet de Liferay necesita cierto cuidado dado que se deben pasar parámetros específicos, además de considerar valores precargados dependiendo del caso.

En este post conoceremos un poco la navegación de Liferay considerando el tag liferay-portlet:renderURL.





RenderURL

El URL se crea usando el tag liferay-portlet:renderURL de la siguiente manera:

 <liferay-portlet:renderURL var="editURL">
 <liferay-portlet:param name="mvcPath" value="/edit.jsp"/> 
 </liferay-portlet:renderURL>

Esta es una manera directa de crear un enlace hacia una página en específico, solo que existen dos problemas:

  1. Si deseamos cambiar el destino de ese enlace, tendríamos que buscar todas los enlaces que apunten a esa página y cambiar manualmente.
  2. Si deseas precargar valores antes de mostrar edit.jsp, sería algo dificultoso.
Por eso, la recomendación es una clase que implemente la interfaz com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand. Esta clase, por convención, debe tener el nombre finalizado por -RenderCommand
. Así:

//...
public class CourseEditRenderCommand implements MVCRenderCommand {
//...

Luego, en la implementación del método, debemos hacer que devuelva la página que queremos mostrar, así:

//...
public class CourseEditRenderCommand implements MVCRenderCommand {

 @Override
 public String render(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException {

  return "/edit.jsp"; //aquí se devuelve la página
 }

}

Y, finalmente, debemos declarar la anotación que declara que esta clase es un Componente de Liferay, así:

//...
@Component(
  immediate = true,
  property = {    
   "javax.portlet.name=" + CoursePortletKeys.COURSE, //el mismo nombre del portlet
   "mvc.command.name=edit-course"                    //el nombre único para llegar a este render
  },
  service = MVCRenderCommand.class                          //servicio de tipo MVCRenderCommand
 )
public class CourseEditRenderCommand implements MVCRenderCommand {
//...


La clase completa es:

package com.apuntesdejava.virtualclassroom.course.portlet;

import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.osgi.service.component.annotations.Component;

import com.apuntesdejava.virtualclassroom.course.constants.CoursePortletKeys;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand;

@Component(
  immediate = true,
  property = {    
   "javax.portlet.name=" + CoursePortletKeys.COURSE, 
   "mvc.command.name=edit-course"
  },
  service = MVCRenderCommand.class
 )
public class CourseEditRenderCommand implements MVCRenderCommand {

 @Override
 public String render(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException {

  return "/edit.jsp";
 }

}

Finalmente, la declaración del URL desde el JSP para llamar será así:
<liferay-portlet:renderURL var="editURL">
 <liferay-portlet:param name="mvcRenderCommandName" value="edit-course"/> <!-- el nombre del render -->
</liferay-portlet:renderURL>

<aui:a href="<%= editURL %>">Editar</aui:a> <!-- usando el enlace -->


Bonus

Es recomendable poner enlaces que permitan regresar a la página anterior, por eso en el init.jsp declararemos las siguientes variables:
<%
 String currentURL = PortalUtil.getCurrentURL(renderRequest);
 String backURL = ParamUtil.getString(renderRequest, "backURL");
%>

Luego, en la declaración del URL, colocar el parámetro backURL apuntando a la página actual:
 <liferay-portlet:renderURL var="editURL">
 <liferay-portlet:param name="mvcRenderCommandName" value="edit-course"/>
 <liferay-portlet:param name="backURL" value="<%= currentURL %>"/>
 </liferay-portlet:renderURL>
 
 <aui:a href="<%= editURL %>">Editar</aui:a>

Y, finalmente, en la página final, debería tener el tag que permita regresar. Ese se llama liferay-ui:header, y se usaría así:
<%@ include file="init.jsp" %>
<liferay-ui:header title="course.edit" backURL="<%= backURL %>"></liferay-ui:header>  

Espero que te haya gustado. Sígueme en mi canal en youtube para crear más contenido así. ¡Bendiciones a todos!

Comentarios

  1. Gracias por tomarse el tiempo para compartir este artículo aquí sobre Navegación entre páginas. Su artículo es muy informativo y lo compartiré con mis otros amigos, ya que la información es realmente muy útil. Sigue compartiendo tu excelente trabajo. Diseño paginas web Peru

    ResponderBorrar
  2. Muy bueno, muchísimas gracias!!! Realmente me ha sido de mucha utilidad, soy nueva en liferay así que la verdad aprendí mucho...

    ResponderBorrar
  3. Hola! mira tengo un problema, al finalizar me dice que el portlet no esta disponible temporalmente al usar Editar

    si lo dejo Editar ya me aparece el portlet pero no me lleva a ningun lugar obteniendo asi un error 400, espero me puedas ayudar :(

    ResponderBorrar

Publicar un comentario

Si quieres hacer una pregunta más específica, hazla en los foros que tenemos habilitados en Google Groups


Ah! solo se permiten comentarios de usuarios registrados. Si tienes OpenID, bienvenido! Puedes obtener su OpenID, aquí: http://openid.net/

Entradas más populares de este blog

UML en NetBeans

Cambiar ícono a un JFrame

RESTful... la forma más ligera de hacer WebServices (Parte 1)