Visualizzando una lista avevo 2 necessità:
Infatti nella tabella bisogna specificare questo:
- Decodificare dei valori in visualizzazione (es. a fronte di alcuni codici dare la relativa descrizione);
- Esportare questi valori in excel in modo da avere le colonne excel già adattate alla descrizione, senza doverlo fare a mano.
Infatti nella tabella bisogna specificare questo:
<display:setproperty name="decorator.media.excel" value="org.decorator.MyDecorator">
In modo da forzare ad utilizzare il decorator anche nell'export, quindi non basta definirlo soltanto a livello di tabella con l'attributo decorator.
Per quanto riguarda invece il punto 2 nel file displaytable.properties occorre dichiarare la seguente proprietà:
export.excel.class=org.displaytag.export.excel.ExcelHssfView
In questo modo tale modifica vale per tutte le tabelle dell'applicazione.Per fare questa modifica premetto che occorre avere la versione 1.2 della libreria assieme al displaytag-export-poi-1.2.jar.
Nel mio caso poi, avendo l'applicazione la libreria POI-3.5 a Runtime avevo un errore di questo tipo:
java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFRow.createCell(I)Lorg/apache/poi/hssf/usermodel
Evidentemente serviva una versione più recente della libreria ma essendo questa utilizzata in altri modi nell'applicazione ho deciso di ridefinirmi l'exporter nel file displaytag.properties facendolo puntare ad una mia classe.Quindi ho decompilato la classe ExcelHssfView (che si trova dentro displaytag-export-poi-1.2.jar) e corretto manualmente gli errori trovati.
In particolare nel metodo doExport ho dovuto fare questa modifica:
HSSFCellStyle headerStyle = wb.createCellStyle();
headerStyle.setFillPattern((short)2);
headerStyle.setFillBackgroundColor((short)54);
HSSFFont bold = wb.createFont();
bold.setBoldweight((short)700);
bold.setColor((short)9);
headerStyle.setFont(bold);
Inserendo il cast a short per i valori numerici.Mentre invece nel costruttore della classe statica ExcelGenerationException ho dovuto commentare il costruttore:
super(Messages.getString("ExcelView.errorexporting"), cause);
In quanto non definito nella libreria displaytag-1.2.jar (!?...) sostituendolo con
super(ExcelGenerationException.class,Messages.getString("ExcelView.errorexporting"));
Adesso tutto funziona come volevo.