Ejemplo de selección de Folder en la configuración de un portlet Liferay 6.2

Por necesidades de mi trabajo hemos tenido que crear un portlet que necesitaba seleccionar en las preferencias del portlet una carpeta del Document Library. Buscando y buscando no hemos encontrado ningún código que estuviera «acabado» para usar en un proyecto, así que aquí tenéis como utilizarlo:

En el fichero de «liferay-portlet.xml» hay que configurar la acción para que se puedan guardar las preferencias a partir del fichero config.jsp que creemos.

<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_2_0.dtd">
<liferay-portlet-app>
 <portlet>
 <portlet-name>UIB Folder Viewer</portlet-name>
 <icon>/icon.png</icon>
 <configuration-action-class>com.liferay.portal.kernel.portlet.DefaultConfigurationAction</configuration-action-class>
 <instanceable>true</instanceable>
 <header-portlet-css>/css/main.css</header-portlet-css>
 <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
 <css-class-wrapper>uib-folder-display-portlet</css-class-wrapper>
 </portlet>
 <role-mapper>
 <role-name>administrator</role-name>
 <role-link>Administrator</role-link>
 </role-mapper>
 <role-mapper>
 <role-name>guest</role-name>
 <role-link>Guest</role-link>
 </role-mapper>
 <role-mapper>
 <role-name>power-user</role-name>
 <role-link>Power User</role-link>
 </role-mapper>
 <role-mapper>
 <role-name>user</role-name>
 <role-link>User</role-link>
 </role-mapper>
</liferay-portlet-app>

En el fichero config.jsp:

<%@ page import="javax.portlet.PortletPreferences"%>
<%@ page import="com.liferay.portlet.PortletPreferencesFactoryUtil"%>
<%@ page import="com.liferay.portal.kernel.util.StringPool"%>
<%@ page import="com.liferay.portal.kernel.util.Validator"%>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil"%>
<%@ page import="com.liferay.portal.kernel.util.Constants" %>
<%@ page import="com.liferay.portal.kernel.util.GetterUtil" %>
<%@ page import="com.liferay.portal.kernel.util.StringUtil"%>
<%@ page import="com.liferay.portal.kernel.util.HtmlUtil"%>
<%@ page import="com.liferay.portal.kernel.language.LanguageUtil"%>
<%@ page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
<%@ page import="com.liferay.portal.util.PortletKeys"%>

<%@ page import="com.liferay.portlet.documentlibrary.service.DLAppServiceUtil"%>
<%@ page import="com.liferay.portal.kernel.repository.model.Folder"%>

<%@ page import="java.util.List,java.util.ArrayList,java.util.Collections" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<liferay-theme:defineObjects />
<liferay-portlet:actionURL portletConfiguration="true" var="configurationURL" />

<liferay-portlet:renderURL portletConfiguration="true" var="configurationRenderURL"/>

<%
long folderId = GetterUtil.getLong(portletPreferences.getValue("folderToView", "-1"),-1);
int daysToShowNew_cfg = GetterUtil.getInteger(portletPreferences.getValue("daysToShowNew","7"), 7);

String folderName = StringPool.BLANK;

if (folderId > 0) {
 Folder folder = DLAppServiceUtil.getFolder(folderId);
 folder = folder.toEscapedModel();
 folderId = folder.getFolderId();
 folderName = folder.getName();
}
else {
 folderName = LanguageUtil.get(pageContext, "Home");
}
%>

<liferay-portlet:renderURL portletName="<%=PortletKeys.DOCUMENT_LIBRARY_DISPLAY %>" 
 var="selectFolderURL" windowState="<%= LiferayWindowState.POP_UP.toString() %>">
 <liferay-portlet:param name="struts_action" value='/document_library_display/select_folder' /><%--/dynamic_data_mapping/select_document_library' --%>
 <liferay-portlet:param name="redirect" value="<%= themeDisplay.getURLCurrent() %>"/>
 <liferay-portlet:param name="ignoreRootFolder" value="<%= Boolean.TRUE.toString() %>" />
 <%if (folderId>0){ %>
 <liferay-portlet:param name="folderId" value="<%= String.valueOf(folderId) %>" />
 <%} %> 
</liferay-portlet:renderURL>

<aui:form action="<%= configurationURL %>" name="fm" method="post" >
 <aui:input name="<%= Constants.CMD %>" type="hidden" value="<%= Constants.UPDATE %>"/>
 <aui:input name="redirect" type="hidden" value="<%= configurationRenderURL.toString() %>"/>
 <aui:fieldset>
 <aui:field-wrapper> 
 < div class="input-append"> 
 <aui:input type="hidden" name='preferences--folderToView--'/>
 <aui:input label="select-folder" name="folderName" type="resource" value="<%= folderName %>" />
 <aui:button name="selectFolderButton" value="select" />
 </ div>
 </aui:field-wrapper>
 </aui:fieldset> 
 <aui:button-row>
 <aui:button type="submit" />
 </aui:button-row> 
</aui:form>

<aui:script use="aui-base">
 A.one('#<portlet:namespace />selectFolderButton').on('click', function(event) {
 Liferay.Util.selectEntity(
 {
 dialog: {
 constrain: true,
 modal: true
 ,width: 680
 },
 id: '_<%= HtmlUtil.escapeJS(PortletKeys.DOCUMENT_LIBRARY_DISPLAY) %>_selectFolder',
 title: '<liferay-ui:message arguments="folder" key="select-x" />',
 uri: '<%= selectFolderURL.toString() %>'
 },
 function(event) {
 A.log('hola: '+event);
 var folderData = {
 idString: 'folderToView',
 idValue: event.folderid,
 nameString: 'folderName',
 nameValue: event.foldername
 };

 Liferay.Util.selectFolder(folderData, '<portlet:namespace />');
 }
 
 );
 }
 );
</aui:script>

 

Y en el fichero de portlet.xml:

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
 <portlet>
 <portlet-name>UIB Folder Viewer</portlet-name>
 <display-name>UIB Folder Viewer</display-name>
 <portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
 <init-param>
 <name>view-template</name>
 <value>/html/folderviewer/view.jsp</value>
 </init-param>
 <init-param>
 <name>config-template</name>
 <value>/html/folderviewer/config.jsp</value>
 </init-param>

...

Espero que os sirva 😉

Esta entrada fue publicada en Uncategorized. Guarda el enlace permanente.

Deja un comentario