MokaByte 94 - Marzo 2005 
La Java Server Pages Standard Tag Library
III parte - Formattazione dati e internazionalizzazione
di
Alfredo Larotonda
Una delle problematiche più frequenti nella realizzazione di applicazioni è quella della corretta presentazione dei dati. Numeri, date, percentuali devono essere rappresentate nella forma desiderata dall'utente e tenendo presente le convenzioni della lingua e del paese dello stesso.
La JSTL fornisce numerosi tag nella libreria fmt per effettuare il parsing e la formattazione di date e numeri e per la gestione dell'internazionalizzazione delle applicazioni. Di seguito esamineremo i principali tag fornendone una panomarica sugli attributi. Una trattazione completa di tutte le possibili casistiche e un elenco completo di relativi esempi è impossibile nello spazio di un articolo. Per cui si è scelto di fare una panoramica sui tag della libreria evidenziandone le potenzialità e rimandando l'approfondimento dei dettagli nei riferimenti presenti in bibliografia.

Formattazione di numeri e date
Abbiamo precedentemente visto che la JSTL comprende un tag, il <c:out>, che consente di stampare dati sulla pagina web. Nel caso di date o numeri il dato viene visualizzato in base ad un formato di default che spesso può non essere soddisfacente per le esigenze della propria applicazione, Se si desidera avere un maggiore controllo sul formato di output dei numeri si può utilizzare il tag <fmt:formatNumber>.
Il formatNumber rende in output il numero in base al locale corrente nella forma di default per il locale stesso se non diversamente specificato.
Ha numerosi attributi come riportati nella tabella seguente:

L'uso degli attributi consente di soddisfare le più comuni esigenze nella formattazione di un numero. Si può scegliere di visualizzare un numero, una percentuale o una valuta in base all'attributo type, controllare il numero di decimali e di interi da visualizzare, scegliere i simboli da utilizzare per la rappresentazione delle valute e così via. Se si vuole un controllo completo sul formato di output è possibile utilizzare l'attributo pattern facendo l'override delle specifiche del locale corrente.


Il tag formatDate è l'analogo del formatNumber per le date. Consente di visualizzare in output una data scegliendo tra i molteplici formati possibili. Gli attributi del tag sono i seguenti:

L'attributo value è obbligatorio e deve essere una variabile di tipo java.util.Date e non una stringa. Questo è molto importante da sottolineare per evitare errori nell'utilizzo del tag.
Il tag può visualizzare solo la data o anche le informazioni di ore minuti e secondi contenuti in essa specificandolo mediante l'utilizzo dell'attributo type.
Esistono formati predefiniti per le date e per la rappresentazione di ore e minuti, che vanno da formati compatti a formati estesi. Altrimenti come per i numeri è possibile usare un pattern se si vuole avere il totale controllo sulla rappresentazione.

 

Parsing di numeri e date
Abbiamo visto i tag che effettuano la formattazione di numeri e date da visualizzare in una pagina web. La JSTL fornisce anche tag che eseguono il compito inverso, cioè quello di leggere stringhe e trasformale in numeri o date in base ad un formato desiderato. Nel caso dei numeri esiste la parseNumber che consente di interpretare numeri espressi sottoforma di stringhe nei formati più disparati.
Per default il tag interpreta la stringa e la trasforma in numero in base alle impostazioni del locale corrente fornito dal browser. Le regole del parsing possono però essere cambiate utilizzando gli attributi del tag che sono i seguenti:

E' possibile specificare ad esempio che si vogliono solo le cifre intere del numero o che si vuole usare per il parsing un locale specifico in luogo di quello corrente. Come sempre il massimo del controllo sulla formattazione lo si può ottenere mediante l'utilizzo di un pattern.

L'analogo per le date è il parseDate che consente di trasformare una stringa in una variabile di tipo java.util.Date in base al formato desiderato.
La gran parte degli attributi del tag sono analoghi a quelli del parseNumber:

Come per gli altri tag anche il parsing delle date è effettuato di default in base al locale corrente fornito dal browser. Si può ovviamente forzare una diversa modalità di parsing mediante l'uso degli attributi. Il type consente di selezionare se si vuole fare il parsing in una Date o in un Time o entrambi. In accordo con gli attributi dateStyle e timeStyle è possibile effettuare il parsing di Date e Time nei formati predefiniti.
Il modo più utile è anche in questo caso l'uso del pattern che consente di specificare nel dettaglio il formato della data di cui fare il parsing.

 

Impostazione del Locale
Tutti i tag visti in precedenza per default prendono il locale del browser come locale predefinito per visualizzare o effettuare il parsing di date e numeri. E' però possibile impostare un locale diverso da quello del browser utilizzando il tag setLocale. Questo può essere utile ad esempio nel caso in cui si voglia che l'utente possa scegliere la lingua con la quale utilizzare l'applicazione.
Il tag setLocale è di uso piuttosto immediato e i suoi attributi sono:

Il locale specificato nell'attributo obbligatorio value diventa il locale per lo scope fissato dall'attributo scope (page è il default).

 

Internazionalizzazione
Oltre che diversi formati di numeri e date , realizzare una applicazione internazionalizzata significa anche visualizzare il testo nelle diverse lingue previste. Java fornisce tutti gli strumenti adatti allo scopo quali i ResourceBundle e il Locale. La JSTL fornisce alcuni tag che consentono di visualizzare testo acquisendolo da resource bundle personalizzati per i diversi locale previsti.
I tag in questione sono fmt:message,fmt:param,fmt:bundle e fmt:setBundle.
fmt:message consente di visualizzare un testo identificato da una key preso dal resource bundle di riferimento per il locale desiderato.

Il tag fmt:param consente di definire dei parametri variabili da inserire in un messaggio mentre i tag fmt:bundle e fmt:SetBundle consentono di impostare il resource bundle da cui prelevare i messaggi.
Il primo agisce solo nella parte di pagina inclusa nel tag mentre il secondo lo imposta definitivamente.

 

Conclusioni
Abbiamo fatto nei paragrafi precedenti una panoramica sui tag di utilizzo più frequente messi a disposizione dalla JSTL per la formattazione di date e numeri e per la gestione dell'internazionalizzazione. Questi tag sono veramente utili poiché assolvono in maniera molto semplice da utilizzare ad un compito piuttosto gravoso in una applicazione che è quello della gestione dei diversi formati di dati e testo. La carrellata presentata ha lo scopo di portare a conoscenza dello sviluppatore che nella J2EE esistono tutti gli strumenti per gestire questa problematica senza dover scrivere codice custom e tanto meno pagine JSP piene di scriptlet. Chiaramente per un reference dettagliato sui tag presentati si faccia riferimento a [2], [3].

 

Bibliografia
[1] Bryan Basham, Kathy Sierra, Bert Bates - "Head First - Servlet & Jsp", O'Reilly, 2004
[2] Autori Vari - "The J2EE 1.4 Tutorial ", Sun Microsystems, 2003
[3] Shawn Bayern - "JSTL in Action" , Manning Pubblications Co., 2004


Alfredo Larotonda, laureato in Ingegneria Elettronica, lavora da diversi anni nel settore IT. Dal 1999 si occupa di Java ed in particolare dello sviluppo di applicazioni web J2EE. Dopo diverse esperienze di disegno e sviluppo ora si occupa in particolare di aspetti architetturali per progetti rivolti al mercato finanziario ed industriale. Ha conseguito le certificazioni SCJP, SCWCD 1.3, SCWCD 1.4, SCBCD.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it