Sacar partido de la configuración de un portlet


A menudo tenemos que definir ciertos comportamientos que tiene un portlet en diferentes situaciones. Un ejemplo claro seria un formulario de contacto; pensad en la situación que tenemos tres sitios web que necesitan de este portlet. Y cada uno necesita que el formulario se envíe a un correo electrónico diferente, con un asunto específico según el sitio de dónde se envíe. Para evitar tener que crear un portlet para cada web podemos aprovechar la configuración del portlet para determinar cómo queremos que sea su comportamiento.

Haremos un ejemplo simple en el que mediante el panel de configuración de un portlet, que muestra un título, una imagen y un listado, podamos decidir si queremos que se muestre la imagen.

Paso 1: Especificar cuál será el archivo “.jsp” de la configuración en el “portlet.xml“.

Añadimos el siguiente código después del tag “<portlet-class>…</portlet-class>” con la localización de nuestro archivo “.jsp” como value.

< init-param > < name >config-template</ name > < value >/html/configuration.jsp</ value ></ init-param >

Paso 2: Crear el archivo jsp “configuration.jsp”.

Creamos un archivo “configuration.jsp” en el directorio indicado en el portlet.xml, en nuestro caso, en “/html/configuration.jsp”. 

<%@include file="/html/init.jsp" %>< liferay-portlet:actionURL   portletConfiguration = "true"   var = "configurationURL"   /><%boolean showsImage = GetterUtil.getBoolean(portletPreferences.getValue("showsImageCheck", StringPool.TRUE));%>< aui:form   action="<%= configurationURL %>" method="post" name="fm"> < aui:input   name="<%= Constants.CMD %>" type="hidden" value="<%= Constants.UPDATE %>" /> < liferay-ui:success   key = "success-setup"   message = "you-have-successfully-updated-the-setup"   /> < liferay-ui:panel   collapsible="<%=true%>" extended="<%=true%>" id="config" persistState="<%= true %>" title="Configuration"> < aui:fieldset   cssClass = "option-content-data"   label = "Options" > < aui:input   label = "Shows Image"   name = "preferences--showsImageCheck--"   type = "checkbox"   value="<%= showsImage %>" /> </ aui:fieldset > </ liferay-ui:panel > < aui:button-row > < aui:button   type = "submit"   /> </ aui:button-row ></ aui:form >

Nota: Es posible estructurar las opciones de la configuración en distintos paneles siempre que el id del panel no se repita o separarlos por fields.

Creamos o añadimos (si es necesario) el archivo “init.jsp” con el siguiente contenido.

<%@ taglib uri=" prefix="c" %><%@ taglib uri="  prefix="aui" %><%@ taglib uri="  prefix="liferay-ui" %><%@ taglib uri="  prefix="liferay-portlet" %><%@ taglib uri="  prefix="liferay-theme" %><%@ taglib uri="  prefix="portlet" %><%@ page import="com.liferay.portal.kernel.util.Constants" %><%@ page import="com.liferay.portal.kernel.util.GetterUtil" %><%@ page import="com.liferay.portal.kernel.util.StringPool" %><%@ page import="com.liferay.portal.kernel.util.ParamUtil" %><%@ page import="com.liferay.portal.kernel.util.Validator" %><%@ page import="com.liferay.portlet.PortletPreferencesFactoryUtil" %><%@ page import="com.liferay.portal.util.PortalUtil" %><%@ page import="javax.portlet.ActionRequest" %><%@ page import="javax.portlet.PortletPreferences" %>< portlet:defineObjects />< liferay-theme:defineObjects /><%PortletPreferences preferences = null;if (renderRequest != null) {    preferences = renderRequest.getPreferences();}String portletResource = ParamUtil.getString(request, "portletResource");if (Validator.isNotNull(portletResource)) {    preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);}%>

 Y añadimos las dependencias necesarias en “liferay-plugin-package.properties”.

portal-dependency-jars=\    jstl-api.jar,\    jstl-impl.jar

Paso 3: Crear el archivo “ConfigurationActionImpl.java” y configurar el “liferay-portlet.xml”.

Creamos el archivo “ConfigurationActionImpl.java” dentro del package “org.portlet.name.action” y, además, tenemos que especificar “DefaultConfigurationAction” como superclase de ésta.

package org.portlet.name.action;import javax.portlet.ActionRequest;import javax.portlet.ActionResponse;import javax.portlet.PortletConfig;import javax.portlet.PortletPreferences;import com.liferay.portal.kernel.portlet.DefaultConfigurationAction;public class ConfigurationActionImpl extends DefaultConfigurationAction {    @Override    public void processAction(PortletConfig portletConfig, ActionRequest actionRequest,        ActionResponse actionResponse) throws Exception {        PortletPreferences prefs = actionRequest.getPreferences();        // Treat preferences        // Store preferences        preferences.store();        super.processAction(portletConfig, actionRequest, actionResponse);    }}

Tratamos las preferences si fuera necesario y las guardamos.

Añadimos el elemento al “liferay-portlet.xml” después del tag “<icon>…</icon>”.

< configuration-action-class >org.portlet.name.action.ConfigurationActionImpl</ configuration-action-class >

Paso 4: Modificamos nuestros archivo “.jsp” para utilizar los valores que extraemos de la configuración del portlet.

– Obtenemos el valor:

<%boolean showsImage = GetterUtil.getBoolean(portletPreferences.getValue("showsImageCheck", StringPool.TRUE));%>

– Utilizamos el valor (ejemplo):

< h1 > <%=titleText%> </ h1 ><% if (showsImage)  { %>    < img   src="<%=imageLink%>" alt=""><% } %>< div ><%=contentList%></ div >

Una vez realizado todos los pasos, al acceder a la configuración del portlet tendremos una nueva pestaña con las opciones que hayamos incluido.

Y este sería el resultado:

Un Saludo.


Leave a Reply

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