Blog

Analysis, events, training
Back

ADT Framework - Graziano Liberati al Liferay Bootcamp 12 giugno 2014

In questo post riporto la traccia della mia presentazione al Liferay bootcamp reloaded che si è tenuto a Milano lo scorso 12 giugno 2014. Il mio intervento si è incentrato sul framework ADT, utile per permettere all'amministratore del portal di gestire la modalità di presentazione dei contenuti senza richiedere l'intervento degli sviluppatori.

Cosa sono gli ADT?

Gli Application Display Template (ADT) permettono gli amministratori di portale di personalizzare la visualizzazione delle applicazioni asset-centric, senza la necessità di intervenire sul codice del portlet o di creare nuovi portlet, hook o temi.

I portlet nativi di Liferay 6.2  che supportano gli ADT sono: Asset Publisher, Blogs, Categories Navigation, Documents and Media, Site map, Tags Navigation, Wiki.

Gli ADT possono essere resi disponibili globalmente su tutti i site se sono posizionati sul site Global, altrimenti sono disponibili solo sul site presso cui sono posizionati.

Nuovi ADT possono essere creati ed associati al portlet di riferimento direttamente dal pannello di controllo. Liferay mette a disposizione un editor che prevede il content assist.

Aggiungere gli ADT ai portlet custom

Come tutti i framework presenti in Liferay, ADT è implementato affinché non sia utilizzabile solo dai componenti nativi di Liferay, ma affinché sia utilizzato anche nei portlet custom.

Affinché un portlet custom sia in grado di gestire gli ADT è necessario:

  • registrare il portlet affinché dichiari di voler utilizzare gli ADT
  • definire i permessi
  • esporre le funzionalità degli ADT agli utenti

ADT e portlet custom - PortletDisplayTemplateHandler

Il portlet custom che intende utilizzare gli ADT deve implementare una classe PortletDisplayTemplateHandler che estende da BasePortletDisplayTemplateHandler. Questa classe è necessaria per definire il contratto tra portlet custom e il framework ADT di Liferay. In particolare è necessario implementare i seguenti metodi:

  • getClassName(): permette al framework ADT di capire il tipo di entity renderizzata dal portlet
  • getName(): indica il nome del tipo di ADT, tipicamente corrisponde al nome del portlet
  • getResourceName(): indica quale risorsa utilizza l'ADT, questo è utilizzato per il controllo dei permessi
  • getTemplateVariableGroups(): definisce quali sono le variabili che devono essere messe a disposizione nel template editor

Affinché la classe PortletDisplayTemplateHandler sia registrata in Liferay da parte del framework ADT deve essere dichiarata nella configurazione del portlet, in particolare nel file liferay-portlet.xml, all'interno del tag <portlet>, tramite il tag <template-handler>.

ADT e portlet custom - Permessi

Dato che la possibilità di gestire gli ADT per il portlet custom è comunque soggetta a controllo di permessi, è necessario aggiungere il permesso alla dichiarazione dei permessi del portlet, che si effettua tramite il file default.xml localizzato nella folder resource-actions. In particolare è necessario aggiungere il permesso nella sezione portlet-resource ADD_PORTLET_DISPLAY_TEMPLATE.

 

ADT e portlet custom - Configuration

Ora il portlet custom è in grado di gestire gli ADT. A questo punto è necessario aggiungere nella modalità CONFIGURATION la possibilità di selezionare il template ADT da utilizzare per la visualizzazione delle entry gestite dal portlet. A tal proposito nella jsp configuration.jsp si aggiunge l'utilizzo della taglib liferay-ui:ddm-template-selector, che recupera gli ADT presenti per il portlet e ne permette la selezione. La taglib richiede che all'interno della jsp sia stato precedentemente istanziato l'oggetto TemplateHandler.

ADT e portlet custom - View

L'ultimo passo è quello di fare in modo che la jsp che si occupa della visualizzazione dei dati sia in grado di gestire la visualizzazione senza ADT e quella con ADT.

All'interno della jsp si aggiunge un blocco <c:choose> all'interno del quale si verifica se è stato configurato l'utilizzo di un ADT tramite la guardia portletDisplayDDMTemplateId > 0. Nel caso in cui non sia stato configurato un ADT la visualizzazione viene gestita secondo il metodo tradizionale, quindi codificando direttamente nella jsp la logica di presentazione. Nel caso in cui sia stato configurato un ADT si utilizza il metodo renderDDMTemplate() della classe PortletDisplayTemplateUtil, a cui sono passati gli elementi da visualizzare.

Raccomandazioni

Tramite il file portal-ext.properties è possibile personalizzare le variabili, classi e package a cui gli amministratori di portale hanno accesso tramite l'editor degli ADT. Questo può essere necessario per motivi di sicurezza e stabilità del sistema.

Nel caso in cui sia necessario interagire con i servizi dai template ADT potrebbe essere necessario aggiungere la disponibilità della variabile serviceLocator, che permette di intercettare ed utilizzare un servizio.

L'utilizzo degli ADT aggiunge ulteriore logica nel processo di presentazione dei dati, quindi vanno tenute sotto controllo le prestazioni. Una buona pratica è fare in modo che il template ADT si occupi esclusivamente della logica di presentazione, nel caso in cui siano necessario eseguire delle operazioni complesse è preferibile incapsularle in metodi ed esporle tramite API nel template editor.

Per tenere sotto controllo le prestazioni è necessario sempre eseguire opportuni test e, se necessario, mettere a punto la gestione della cache dei linguaggi di scripting utilizzati per la gestione degli ADT tramite le proprietà

  • freemarker.engine.resource.modification.check.interval
  • velocity.engine.resource.modification.check.interval

Gestione degli errori

Nella creazione dei template è possibile migliorare la gestione degli errori tramite le seguenti proprietà

  • freemarker.engine.template.exception.handler
  • velocity.engine.logger
  • velocity.engine.logger.category

Il framework ADT

Il framework ADT riutilizza due elementi già presenti in Liferay, in particolare:

  • service layer: per la gestione di strutture e template in qualsiasi applicazione in Liferay viene utilizzato il portlet Dynamic Data Mapping (DDM). il DDM è stato utilizzato anche per la gestione dei template ADT
  • presentazione: per la gestione della logica di presentazione sono stati utilizzati i due template engine già presenti in Liferay, Freemarker e Velocity, contestualizzati opportunamente in base al portlet che utilizza il framework

Per completare il framework è stato aggiunto un portlet per la gestione dei template. Inoltre è stato implementato un meccanismo che permette a ciascun portlet di definire il proprio contesto da utilizzare nei propri template per gestire la logica di presentazione.

Sono state aggiunte anche delle taglib per permetterne un più facile utilizzo nei portlet custom.

Contatta ViVieb!

This field is mandatory.
This field is mandatory.
This field is mandatory.
This field is mandatory.
Text to Identify Refresh CAPTCHA Refresh CAPTCHA

Cristina Pepe
Posts: 3
Stars: 0
Date: 15/06/18
Graziano Liberati
Posts: 23
Stars: 0
Date: 29/11/17
Redazione ViVieb
Posts: 29
Stars: 0
Date: 02/05/16