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 😉






