viernes, 5 de junio de 2015

Página de configuración en portlet de Liferay

Varias veces he batallado para recordar y/o encontrar como crear una página de configuración en un portlet al estilo Liferay, así que dejare el proceso aquí para futuras referencias, o por si a alguien le sirve!
(Digo al estilo Liferay porque siempre puedes crear una pagina mas en tu portlet, que tenga acceso restringido para Admins, y manejar ahi las configuraciones del portlet. Pero los portlets de que trae Liferay de caja, no se configuran asi.)

Primero, creamos nuestro portlet.

Entramos al archivo liferay-portlet.xml, en este agregamos el configuration-action-class, usando la clase DefaultConfigurationAction. quedaria asi:

<portlet>
 <portlet-name>configtest</portlet-name>
 <icon>/icon.png</icon>
 <configuration-action-class>com.liferay.portal.kernel.portlet.DefaultConfigurationAction</configuration-action-class>
 <header-portlet-css>/css/main.css</header-portlet-css>
 <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
 <css-class-wrapper>configtest-portlet</css-class-wrapper>
</portlet>

Al agregar esto, liferay ya crea en las configuraciones del portlet una nueva pestaña llamada setup. Esta pestaña estara en blanco, ahora creemos la página para mostrar algo.

En el archivo de configuración del portlet, portlet.xml agregamos un parámetro de inicialización mas, para agregar el jsp.

<init-param>
 <name>view-template</name>
 <value>/view.jsp</value>
</init-param>
<init-param>
        <name>config-template</name>
        <value>/config.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>

El nombre del parámetro debe ser config-template, así es como Liferay sabe que ese parámetro es para la configuración del portlet.

Agregamos la pagina config.jsp en este caso a la misma altura de view.jsp, que es la pagina que se crea automáticamente al generar el portlet.

En el view.jsp vamos a traer la configuración para pintarla.

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<%=message %>.


Y en el config.jsp creamos una forma, con un textbox para poner el mensaje que queremos mostrar al usuario (en este caso).
<%@page import="com.liferay.portal.kernel.util.Constants"%>
<%@ taglib uri="http://alloy.liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />
<%
String message = portletPreferences.getValue("message", "hola mundo");
%>
<liferay-portlet:actionURL portletConfiguration="true" var="configURL"/>
<liferay-portlet:renderURL portletConfiguration="true" var="configRenderURL"/>

<aui:form action="<%=configURL %>" method="post" name="fm">
 <aui:input name="<%=Constants.CMD %>" type="hidden" value="<%=Constants.UPDATE %>" />
 <aui:input name="redirect" type="hidden" value="<%=configRenderURL %>" />
 <aui:fieldset>
  <aui:input name="preferences--message--" id="message" label="Welcome Message" value="<%=message %>" />
 </aui:fieldset>
 <aui:button-row>
  <aui:button type="submit"/>
 </aui:button-row>
</aui:form>


En el value del textbox, usamos en el name el doble guion para la propiedad message, que es la que utilizamos en el view.jsp para mostrar el mensaje que queremos que vea el usuario, esto es para que la clase DefaultConfigurationAction haga todo mágicamente, sin tener necesidad nosotros de mandarlo guardar o mandarlo traer de la base de datos en un Controller. Este método de guardado/extracción solo se usa en la forma, no al momento de ir por la propiedad en las preferencias del portlet.

Y listo! esto debe tener un portlet con una pagina de configuración al estilo Liferay!


Resultado final:



No hay comentarios:

Publicar un comentario