bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Utilizzare il selettore directory della Document Library da Javascript

Quando è necessario selezionare una cartella della Document Library di Liferay, una pratica alternativa all'implementazione degli ItemSelector, e nello specifico dei FileItemSelector, è l'invocazione tramite javascript della procedura nativa di selezione cartella della Document Library di Liferay.

Vediamo come fare in Liferay 7.0.

Per prima cosa è necessario individuare quali sono i file che contengono le funzioni javascript che "invocano" la procedura di selezione della cartella.

Il package jar contenente i sorgenti è: "com.liferay.document.library.web-3.0.16-sources.jar"

All'interno del package nel percorso "\META-INF\resources\document_library\" si trovano i file .jsp di nostro interesse, nello specifico: "configuration.jsp" e "init.jsp"

Dal file "configuration.jsp" possiamo estrapolare lo script javascript di nostro interesse e inserirlo nel file .jsp di nostro interesse:

<aui:script>
                AUI.$('#<portlet:namespace />selectFolderButton').on(
                    'click',
                    function(event) {
                        Liferay.Util.selectEntity(
                            {
                                dialog: {
                                    constrain: true,
                                    destroyOnHide: true,
                                    modal: true,
                                    width: 600
                                },
                                id: '_<%= HtmlUtil.escapeJS(portletResource) %>_selectFolder',
                                title: '<liferay-ui:message arguments="folder" key="select-x" />',
 
                                <liferay-portlet:renderURL portletName="<%= portletResource %>" var="selectFolderURL"
                                    windowState="<%= LiferayWindowState.POP_UP.toString() %>">
                                    <portlet:param name="mvcRenderCommandName" value="/document_library/select_folder" />
                                    <portlet:param name="folderId" value="<%= String.valueOf(rootFolderId) %>" />
                                    <portlet:param name="ignoreRootFolder" value="<%= Boolean.TRUE.toString() %>" />
                                    <portlet:param name="showMountFolder" value="<%= Boolean.FALSE.toString() %>" />
                                </liferay-portlet:renderURL>
 
                                uri: '<%= HtmlUtil.escapeJS(selectFolderURL.toString()) %>'
                            },
                            function(event) {
                                var folderData = {
                                    idString: 'rootFolderId',
                                    idValue: event.folderid,
                                    nameString: 'rootFolderName',
                                    nameValue: event.foldername
                                };
 
                                Liferay.Util.selectFolder(folderData, '<portlet:namespace />');
                            }
                        );
                    }
                );
            </aui:script>
 
 

Per poter utilizzare questo codice sarà necessario apportare qualche modifica, ma prima di tutto dovremo inserire nel nostro file .jsp il pulsante con nome "selectFolderButton" cui è associato l'evento di click.

Ad esempio: 

<aui:button name="selectFolderButton" value="choose-directory" /> 

Nel codice javascript ci sono due variabili Java che vengono passate come parametri nella liferay-portlet:renderURL devono essere valorizzate: portletResource e rootFolderId.

portletResource lo valorizziamo a:

<% String portletResource = "com_liferay_document_library_web_portlet_DLPortlet"; %>

Il valore impostato corrisponde alla costante DOCUMENT_LIBRARY della classe DLPortletKeys del pacakge com.liferay.document.library.constants.

public class DLPortletKeys {
 
public static final String DOCUMENT_LIBRARY ="com_liferay_document_library_web_portlet_DLPortlet";
 
Utilizziamo direttamente il valore della costante passato come stringa per problemi di conflitti di librerie che si avrebbero utilizzando la classe DLPortletKeys.
 
rootFolderId deve essere valorizzato al valore dell'id della folder di root, questo può essere impostato, ad esempio a "0" se vogliamo partire dalla root della Document Library, oppure a un valore ricavato dal contesto applicativo.
 
Una volta cliccato il pulsante selectFolderButton si aprirà una pop-up window dalla quale sarà possibile esplorare l'albero delle cartelle e selezionare la cartella desiderata con il pulsante "Scegli".
Una volta effettuata la selezione, nell'oggetto javascript folderData vengono ritornati i dati relativi alla cartella selezionata da UI: idValue, nameValue.

 

Commenti
Nessun commento. Vuoi essere il primo.