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

Realizzare una taglib conforme allo standard Liferay

Realizzare una taglib non è un'operazione particolarmente complessa, ma se vogliamo realizzarla in maniera conforme allo standard Liferay dobbiamo stare attenti ad alcuni dettagli.

Ma in cosa consiste esattamente lo standard Liferay per le taglib?In pratica, quello che fanno le taglib di Liferay è includere una JSP ed inserire tutta la logica al suo interno; vediamo come.

Quello che vedremo adesso è come realizzare una semplicissima taglib che visualizza la data e l'ora corrente; la nostra attenzione, infatti, non è su cosa fa la taglib ma su come si crea.

Innanzitutto creiamo il nostro plugin di tipo portlet, al cui interno andremo ad inserire la nostra (o le nostre) taglib.

La prima cosa da creare è il TLD che contiene la definizione della taglib e di tutti i suoi attributi; pertanto creiamo il file WEB-INF/tld/my-taglib-library.tld con il seguente contenuto:

<?xml version="1.0"?>


<taglib

version="2.0"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

>

<description>My taglib library</description>

<tlib-version>1.0</tlib-version>

<short-name>my-taglib-library</short-name>

<uri>http://dvel.it/liferay/tld/my</uri>

<tag>

<description>This is the clock taglib</description>

<name>clock</name>

<tag-class>it.dvel.liferay.taglib.ClockTag</tag-class>

<body-content>empty</body-content>

<attribute>

<description>Datetime pattern</description>

<name>pattern</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

<type>java.lang.String</type>

</attribute>

<attribute>

<description>Portlet ID</description>

<name>portletId</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

<type>java.lang.String</type>

</attribute>

</tag>

</taglib>

Il significato è abbastanza ovvio ma mi soffermo solamente sui 2 attributi:

  • pattern, è un semplice parametro per definire come visualizzare la data odierna;
  • portletId, indica il nome della portlet e serve per localizzare correttamente la JSP da utilizzare, altrimenti Liferay la cerca tra quelle di portale.

Dopodichè possiamo passare alla classe Java che implementa la taglib. Liferay mette già a disposizione una tassonomia di taglib molto vasta ma la classe Java di riferimento è sicuramente IncludeTag che racchiude il meccanismo che ci interessa; pertanto andremo ad estendere proprio questa classe:

package it.dvel.liferay.taglib;


import javax.servlet.http.HttpServletRequest;


import com.liferay.portal.kernel.util.StringPool;

import com.liferay.taglib.util.IncludeTag;


public class ClockTag extends IncludeTag {


private static final String _PAGE = "/html/taglib/clock/page.jsp";


private String _pattern = StringPool.BLANK;


public void setPattern(String pattern) {
this._pattern = pattern;

}

@Override

protected void cleanUp() {
_pattern = StringPool.BLANK;

setPortletId(null);

}


@Override

protected String getPage() {

return _PAGE;

}


@Override

protected void setAttributes(HttpServletRequest request) {
request.setAttribute("my-taglib-library:clock:pattern", _pattern);

}

}

Questa classe richiede qualche spiegazione in più:

  • ovviamente vanno definiti tutti i setter relativi ai parametri della taglib definiti nel TLD;
  • il metodo setPortletId non c'è perchè è già presente nella superclasse;
  • il campo _PAGE rappresenta il percorso completo (all'interno del nostro plugin) della JSP da utilizzare;
  • il metodo getPage restituisce il valore del campo_PAGE;
  • il metodo cleanUp serve per resettare tutti i campi della taglib al termine dell'elaborazione e serve nel caso in cui la taglib venga usata più volta in pagina;
  • il metodo setAttributes serve per iniettare nella request tutti i parametri che verranno utilizzati poi nella JSP;
  • il nome di ciascun parametro deve seguire la seguente nomenclatura: uri_taglibrary:nome_tag:nome_attributo, ad esempiomy-taglib-library:clock:pattern.

Infine possiamo definire la JSP creando il file /html/taglib/clock/page.jsp:

<%@ include file="/html/init.jsp" %>


<%

String pattern =

GetterUtil.getString(request.getAttribute("my-taglib-library:clock:pattern"));


DateFormat dateFormat =

DateFormatFactoryUtil.getSimpleDateFormat(pattern, locale, timeZone);

%>


<%=dateFormat.format(new Date()) %>

Il suo funzionamento è estremamente banale, ma non è quello l'obiettivo di questo post.

Da notare unicamente il recupero del parametro pattern attraverso la nomenclatura vista sopra.

Ok, e adesso?

Adesso potete utilizzare la vostra taglib, includendo prima il TLD:

<%@ taglib uri="http://dvel.it/liferay/tld/my" prefix="my-taglib-library" %>


<my-taglib-library:clock

pattern="dd MMMM yyyy hh:mm:ss"

portletId="1_WAR_mytagliblibraryportlet"

/>

Ovviamente gli attributi uri e prefix della direttiva taglib si ricavano dal TLD e l'identificativo della portlet dipende da come l'avete chiamata.

Buon Natale a tutti!

Precedente
Commenti
Nessun commento. Vuoi essere il primo.