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
En este post conoceremos un poco la navegación de Liferay considerando el tag
Esta es una manera directa de crear un enlace hacia una página en específico, solo que existen dos problemas:
Luego, en la implementación del método, debemos hacer que devuelva la página que queremos mostrar, así:
Y, finalmente, debemos declarar la anotación que declara que esta clase es un Componente de Liferay, así:
La clase completa es:
Finalmente, la declaración del URL desde el JSP para llamar será así:
Y, finalmente, en la página final, debería tener el tag que permita regresar. Ese se llama
Espero que te haya gustado. Sígueme en mi canal en youtube para crear más contenido así. ¡Bendiciones a todos!
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:
- Si deseamos cambiar el destino de ese enlace, tendríamos que buscar todas los enlaces que apunten a esa página y cambiar manualmente.
- 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
. Así:
com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand
. Esta clase, por convención, debe tener el nombre finalizado por -RenderCommand
//... 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 elinit.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!
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
ردحذفMuy bueno, muchísimas gracias!!! Realmente me ha sido de mucha utilidad, soy nueva en liferay así que la verdad aprendí mucho...
ردحذف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 :(