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

Velocity variables in Liferay 6.2

Sicuramente tutti voi attenti osservatori avrete notato la "scomparsa" della classe VelocityVariablesImpl dalla versione 6.2 di Liferay.

Questa classe, per chi non lo sapesse, era quella che inseriva all'interno del contesto di Velocity le variabili che potevano essere quindi utilizzate all'interno dei temi di Liferay.

Dalla versione 6.2, quindi, dove potete vedere quali variabili avete all'interno del vostro tema?

La risposta è presto data!

Intanto potete consultare il file localizzato in<liferay_dir>/html/themes/_unstyled/templates/init.vm; dentro a questo file, infatti, troverete buona parte delle variabili presenti all'interno del tema.

Ovviamente se dovete aggiungerne delle vostre dovete inserirle all'interno del vostro tema nel file init_custom.vm, ricordatevelo! ;)

Le altre variabili, invece, sono inserite nel contesto di Velocity da questi file:

  • com.liferay.portal.template.TemplateContextHelper
  • com.liferay.portal.velocity.VelocityTemplateContextHelper
  • com.liferay.taglib.util.ThemeUtil

Vediamo un po' che cosa contengono di interessante! ;)

Le variabili usate più di frequente le trovate nel TemplateContextHelper; qui dentro troverete la request HTTP, mappata nella variabile $request e di tipo javax.servlet.http.HttpServletRequest.

Come vedrete, poi, sono presenti anche la $renderRequest e la $renderResponse (rispettivamente javax.portlet.PortletRequest e javax.portlet.PortletResponse).

Potete trovare poi anche delle variabili di "supporto" al vostro codice, come il $portletConfig, lo $scopeGroupId o il $permissionChecker (istanza del com.liferay.portal.security.permission.PermissionChecker necessario per l'utilizzo dei permessi all'interno del vostro codice).

La classe VelocityTemplateContextHelper, invece, è molto simile alla vecchia VelocityVariablesImpl; al suo interno, infatti, potete trovare l'istanza del $dateTool, l'oggetto che mappa la classe org.apache.velocity.tools.generic.DateTool.DateTool. All'interno di questa classe trovate anche $mathTool (org.apache.velocity.tools.generic.MathTool.MathTool), $sortTool (org.apache.velocity.tools.generic.SortTool.SortTool) e una serie di altri oggetti che potete vedere aprendo il sorgente.

Questa classe, dicevo, è quella che riassume meglio la VelocityVariableImpl e che incorpora quindi anche le funzionalità necessarie per poter passare dalla vostra portlet degli oggetti nello scope di Velocity.

Ricordate come si fa? :)

Questo snippet dovrebbe aprirvi un mondo di possibilità:

// Insert custom vm variables
Map<String, Object> vmVariables =

(Map<String, Object>) request.getAttribute(WebKeys.VM_VARIABLES);


if (vmVariables != null) {

for (Map.Entry<String, Object> entry : vmVariables.entrySet()) {

String key = entry.getKey();

Object value = entry.getValue();

if (Validator.isNotNull(key)) {

template.put(key, value);

}

}

}

Infine, c'è la classe ThemeUtil, all'interno della quale, come dice anche il nome, trovate una serie di oggetti molto comodi quando si costruisce un tema come, ad esempio, il $pageContext (javax.servlet.jsp.PageContext), il $themeServletContext (javax.servlet.ServletContext), il $taglibLiferay (com.liferay.taglib.util.VelocityTaglib).

Infine, prima di lasciarvi, un ultimo accorgimento!

Come già detto anche in un precedente articolo, se volete accedere ai metodi di service che, per inciso, sono mappati nel contesto dalla TemplateContextHandler, è necessario abilitare la property di portale relativa al ServiceLocator; nel dettaglio:

velocity.engine.restricted.variables=

valorizzandola, come sopra riportato, a stringa vuota. In questo modo "sbloccherete" l'accesso al ServiceLocator e potrete così invocare i vostri *Service direttamente da Velocity! :)
Alla prossima e, se avete domande, basta commentare questo post! ;)
Ciao!
Precedente
Commenti
Aggiungi Commento
Marco Napolitano
Volevo solo sottolineare il fatto che la property "velocity.engine.restricted.variables" è disponibile solamente a partire da Liferay 6.2.
Su Liferay 6.1 la variabile si chiama "journal.template.velocity.restricted.variables".
Inviato il 09/07/15 14.02.
domenica vicchio
scusate se scrivo qui , avrei bisogno di un programamtore in liferay 6.2 mi potete dare una mano ? esistono manuali in italiano di liferay 6.2
Inviato il 09/07/15 14.02 in risposta a Marco Napolitano.
Jader Jed Francia
Ciao Domenica!
Chiama direttamente in ufficio domani mattina, così vediamo come ti posso aiutare! ;)
Il numero è questo: 051271331
Ciao!
Inviato il 09/07/15 14.02 in risposta a domenica vicchio.