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 😉