martedì 22 gennaio 2013

Display Table, decorator per singola colonna

Con Display Table è possibile creare una classe che faccia da decoratore a tutti i dati della collection rappresentata a video, ma in molti casi questa operazione risulta ripetitiva.
Un caso tipico è quello della formattazione di date, valute etc. che ci arrivano in formati diversi dal db.
In tali casi è possibile utilizzare dei decoratori sulle singole colonne, quindi si definisce una classe per la formattazione e in tutte le colonne in cui se ne ha bisogno si aggancia il decoratore.
Tale decoratore implementa l'interfaccia DisplaytagColumnDecorator, che dalla versione 1.1 sostituisce la precedente ColumnDecorator, ora deprecata.
Vediamo un esempio, ottenuto con la libreria display-tag-1.2.

La classe decoratore è definita così:


import javax.servlet.jsp.PageContext;
import org.displaytag.decorator.DisplaytagColumnDecorator;
import org.displaytag.exception.DecoratorException;
import org.displaytag.properties.MediaTypeEnum;
public class DateColumnDecorator implements DisplaytagColumnDecorator {
public Object decorate(Object colonna, PageContext arg1, MediaTypeEnum arg2)
   throws DecoratorException {
   StringBuffer sb=new StringBuffer();
   String data=(String)colonna;
   if(data !=null && data.length()==8){
   String anno=data.substring(0,4);
   String mese=data.substring(4, 6);
   String giorno=data.substring(6,8);
   sb.append(giorno);
   sb.append("/");
   sb.append(mese);
   sb.append("/");
   sb.append(anno);
   }
   else
   {
    sb.append(data);
   }
  return sb.toString();
 }
}


Lo scopo è quello di formattare date che arrivano nel formato AAAAMMGG in GG/MM/AAAA.

Il frammento di display table in cui si richiama il decoratore è il seguente:


<display:column property="dt_reg" title="Data Immissione Verifica"  decorator="org.gianos.form.decorator.DateColumnDecorator"  sortable="true"/>


Nessun commento:

Posta un commento