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.