SeamFramework.orgCommunity Documentation
Seam supporta inoltre la generazione di fogli elettronici the Microsoft® Excel® spreadsheet application tramite l'eccellente libreria JExcelAPI . Il documento generato è compatibile con the Microsoft® Excel® spreadsheet application versione 95, 97, 2000, XP e 2003. Attualmente viene esposto un limitato set di funzionalità di questa libreria, ma lo scopo finale è riuscire a fare tutto ciò che la libreria consente. Si prega di fare riferimento alla documentazione di JExcelAPI per ulteriori informazioni, possibilità e limitazioni.
The Microsoft® Excel® spreadsheet application jboss-seam-excel.jar
. Questo JAR contiene i controlli the Microsoft® Excel® spreadsheet application JSF, che vengono impiegati per costruire le viste che possono generare il documento, ed il componente DocumentStore, che serve il documento generato all'utente. Per includere il supporto ad the Microsoft® Excel® spreadsheet application nella propria applicazione, si includa jboss-seam-excel.jar
nella directory WEB-INF/lib
assieme al file jxl.jar
. Inoltre, occorre configurare il servlet DocumentStore in web.xml.
Il modulo The Microsoft® Excel® spreadsheet application di Seam richiede l'uso di Facelets come tecnologia per la vista. Inoltre richiede l'uso del pacchetto seam-ui.
Il progetto examples/excel
contiene un esempio del supporto the Microsoft® Excel® spreadsheet application in azione. Mostra come eseguire il correttto impacchettamento per il deploy e mostra le funzionalità esposte.
La personalizzazione del modulo per supportare altri tipi di API the Microsoft® Excel® spreadsheet application è diventata molto semplice. Si implementi l'interfaccia ExcelWorkbook
, e si registri in components.xml.
<excel:excelFactory>
<property name="implementations">
<key
>myExcelExporter</key>
<value
>my.excel.exporter.ExcelExport</value>
</property>
</excel:excelFactory
>
e si registri il namespace excel nei tag dei componenti con
xmlns:excel="http://jboss.com/products/seam/excel"
Poi si imposti il tipo UIWorkbook per myExcelExporter
e verrà usato il proprio esportatore. Di default è "jxl", ma è stato aggiunto anche il supporto per CSV, usando il tipo "csv".
Si veda Sezione 18.6, «Configurazione di iText» per informazioni su come configurare il document servlet per servire i documenti con estensione .xls.
Se si incontrano problemi nell'accedere al file generato con IE (specialmente con https), ci si assicuri di non avere messo restrizioni nel browser (si veda http://www.nwnetworks.com/iezones.htm/), restrizioni di sicurezza in web.xml oppure una combinazione delle due.
L'uso base del supporto ai fogli elettronici è molto semplice; viene usato come il familiare <h:dataTable>
e si può associare una List
, Set
, Map
, Array
o DataModel
.
<e:workbook xmlns:e="http://jboss.com/products/seam/excel">
<e:worksheet>
<e:cell column="0" row="0" value="Hello world!"/>
</e:worksheet>
</e:workbook>
Non è molto utile, guardiamo quindi ai casi più comuni:
<e:workbook xmlns:e="http://jboss.com/products/seam/excel">
<e:worksheet value="#{data}" var="item">
<e:column>
<e:cell value="#{item.value}"/>
</e:column>
</e:worksheet>
</e:workbook>
In primo luogo si ha a livello più alto un elemento workbook, che serve come container e non ha attributi. L'elemento figlio worksheet ha due attributi; value="#{data}" è il binding EL ai dati e var="item" è il nome dell'elemento corrente. Innestato dentro worksheet c'è una singola colonna e dentro essa si vede la cella, che è l'associazione finale ai dati dell'elemento iterato.
Questo è ciò che serve sapere per cominciare a mettere dati nei fogli elettronici!
I workbook sono i padri di livello più alto dei worksheet e dei link ai fogli di stile.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:cell value="Hello World" row="0" column="0"/>
</e:worksheet>
<e:workbook>
definisce un workbook con un foglio di lavoro ed un saluto in A1
I worksheet sono figli dei workbook e padri delle colonne e dei comandi worksheet. Possono anche contenere celle, formule, immagini e collegamenti esplicitamente collocati. Sono le pagine che creano il workbook.
|
Elementi figli
Facets
|
<e:workbook>
<e:worksheet name="foo" startColumn="1" startRow="1">
<e:column value="#{personList}" var="person">
<f:facet name="header">
<e:cell value="Last name"/>
</f:facet>
<e:cell value="#{person.lastName}"/>
</e:column>
</e:worksheet>
<e:workbook>
definisce un worksheet con nome "foo", che inizia in B2.
Le colonne sono figle dei worksheet e padri delle celle, immagini, formule e collegamenti. Sono la struttura che controlla l'iterazione dei dati del worksheet. Si veda Sezione 19.14.5, «Impostazioni colonna» per la formattazione.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:column value="#{personList}" var="person">
<f:facet name="header">
<e:cell value="Last name"/>
</f:facet>
<e:cell value="#{person.lastName}"/>
</e:column>
</e:worksheet>
<e:workbook>
definisce una colonna con un intestazione ed un output iterato.
Le celle sono innestate dentro le colonne (per l'iterazione) o dentro i worksheet (per il collocamento diretto usando gli attributi column
e row
) e sono responsabili dell'output del valore (solitamente tramite un'espressione EL che coinvolge l'attributo var
della datatable. Vedere ???
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet
>
<e:column value="#{personList}" var="person">
<f:facet name="header">
<e:cell value="Last name"/>
</f:facet>
<e:cell value="#{person.lastName}"/>
</e:column>
</e:worksheet>
</e:workbook
>
definisce una colonna con un intestazione ed un output iterato.
Le validazioni vengono innestate dentro celle o formule. Esse aggiungono vincoli ai dati di cella.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:column value="#{personList}" var="person"
>
<e:cell value="#{person.age">
<e:numericValidation condition="between" value="4"
value2="18"/>
</e:cell>
</e:column>
</e:worksheet>
</e:workbook
>
aggiunge la validazione numerica alla cella specificando che il valore deve essere tra 4 e 18.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:column value="#{personList}" var="person"
>
<e:cell value="#{person.position">
<e:rangeValidation startColumn="0" startRow="0"
endColumn="0" endRow="10"/>
</e:cell>
</e:column>
</e:worksheet>
</e:workbook
>
aggiunge la validazione ad una cella specificando che il valore deve essere in valori specificati nel range A1:A10.
|
Attributi
Elementi figli
Facets
|
e:listValidation è solo un container per mantenere diversi tag e:listValidationItem.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:column value="#{personList}" var="person"
>
<e:cell value="#{person.position">
<e:listValidation>
<e:listValidationItem value="manager"/>
<e:listValidationItem value="employee"/>
</e:listValidation>
</e:cell>
</e:column>
</e:worksheet>
</e:workbook
>
aggiunge la valodazione ad una cella specificando che il valore deve essere "manager" o "employee".
Le maschere di formato sono definite nell'attributo maschera in celle o formule. Ci sono due tipi di maschere di formato, uno per numeri e uno per date.
Incontrando una maschera di formato, in primo luogo è contrassegnata se è in una form interna, es. "format1", "accounting_float" e così via (si veda jxl.write.NumberFormats ).
se la maschera non è nella lista, viene trattata come una maschera personalizzata (si veda java.text.DecimalFormat ). Es. "0.00" e automaticamente convertita nella corrispondenza più vicina.
Incontrando una maschera di formato, in primo luogo è contrassegnata se è in una form interna, es. "format1", "format2" e così via (si veda jxl.write.DecimalFormats ).
se la maschera non è nella lista, viene trattata come maschera personalizzata (si veda java.text.DateFormat ), es. "dd.MM.yyyy" viene automaticamente convertita nella corrispondenza più vicina.
Le formule sono innestate nelle colonne (per iterazione) o dentro i worksheet (per collocazione diretta usando gli attributi column
e row
) e aggiungono calcoli o funzioni ai range di celle. Sono essenzialmente celle, si veda Sezione 19.6, «Celle» per gli attributi disponibili. Si noti che possono impiegare template ed avere definizioni proprie di font, ecc. come le normali celle.
La formula della cella è collocata nell'attributo value
come una normale annotazione the Microsoft® Excel® spreadsheet application. Si noti che quando si fanno formule con riferimenti ad altri fogli, i worksheet devo esistere prima di eseguire riferimenti ad essa. Il valore è una stringa.
<e:workbook>
<e:worksheet name="fooSheet">
<e:cell column="0" row="0" value="1"/>
</e:worksheet>
<e:worksheet name="barSheet">
<e:cell column="0" row="0" value="2"/>
<e:formula column="0" row="1"
value="fooSheet!A1+barSheet1!A1">
<e:font fontSize="12"/>
</e:formula>
</e:worksheet>
</e:workbook
>
definisce una formula in B2 che somma le celle A1 nei worksheet FooSheet e BarSheet.
Le immagini sono innestate dentro le colonne (per iterazione) o dentro i worksheet (per collocazione diretta usando gli attributi startColumn/startRow
e rowSpan/columnSpan
). Gli span sono opzionali e se omessi, l'immagine verrà inserita senza ridimensionamento.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:image startRow="0" startColumn="0" rowSpan="4"
columnSpan="4" URI="http://foo.org/logo.jpg"/>
</e:worksheet>
</e:workbook
>
definisce un'immagine in A1:A5 basato sui dati in questione
Gli hyperlink sono innestati dentro le colonne (per iterazione) o dentro i worksheet (per collocazione diretta usando gli attributi startColumn/startRow
e endColumn/endRow
). Aggiungono agli URI una navigazione tramite link.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:hyperLink startRow="0" startColumn="0" endRow="4"
endColumn="4" URL="http://seamframework.org"
description="The Seam Framework"/>
</e:worksheet>
</e:workbook
>
definisce un hyperlink che punta a SFWK nell'area A1:E5
Intestazioni e pié di pagina sono figli dei fogli di lavoro e contengono facet che a loro volta contengono una stringa con i comandi da analizzare.
|
Attributi
Elementi figli
Facets
|
|
Attributi
Elementi figli
Facets
|
Il contenuto dei facets è una stringa che può contenere vari comandi delimitati da # come segue:
<e:workbook> <e:worksheet> <e:hyperLink startRow="0" startColumn="0" endRow="4" endColumn="4" URL="http://seamframework.org" description="The Seam Framework"/> </e:worksheet> </e:workbook > |
Inserisce la data corrente |
#page_number# |
Inserisce il numero della pagina corrente |
#time# |
Inserisce l'orario corrente |
#total_pages# |
Inserisce il conteggio totale della pagina |
#worksheet_name# |
Inserisce il nome del worksheet |
#workbook_name# |
Inserisce il nome del workbook |
#bold# |
Attiva il font in grassetto, usare un altro #bold# per disattivarlo |
#italics# |
Attiva il font in corsivo, usare un altro #italic# per disattivarlo |
#underline# |
Attiva la sottolineatura, usare un altro #underline# per disattivarla |
#double_underline# |
Attiva la doppia sottolineatura, usare un altro #double_underline# per disattivarla |
#outline# |
Attiva il font outline, usare un altro #outline# per disattivarlo |
#shadow# |
Attiva il font ombreggiato, usare un altro #shadow# per disattivarlo |
#strikethrough# |
Attiva il font barrato, usare un altro #strikethrough# per disattivarlo |
#subscript# |
Attiva il font subscripted, usare un altro #subscript# per disattivarlo |
#superscript# |
Attiva il font superscript, usare un altro #superscript# per disattivarlo |
#font_name# |
Imposta il nome dei font, si usa come #font_name=Verdana# |
#font_size# |
Imposta la dimensione dei font, si usa come #font_size=12# |
<e:workbook>
<e:worksheet
>
<e:header>
<f:facet name="left">
This document was made on #date# and has #total_pages# pages
</f:facet>
<f:facet name="right">
#time#
</f:facet>
</e:header>
<e:worksheet>
</e:workbook>
Stampa le aree ed i titoli figli dei worksheet e dei templatee fornisce...stampa aree e titoli.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet
>
<e:printTitles firstRow="0" firstColumn="0"
lastRow="0" lastColumn="9"/>
<e:printArea firstRow="1" firstColumn="0"
lastRow="9" lastColumn="9"/>
</e:worksheet>
</e:workbook>
definisce un titolo di stampa tra A1:A10 ed un'area di stampa tra B2:J10.
I comandi per i fogli di lavoro sono figli dei workbook e vengono solitamente eseguiti solo una volta.
Fornisce un raggruppamento di colonne e righe.
|
Attributi
Elementi figli
Facets
|
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet
>
<e:groupRows startRow="4" endRow="9" collapse="true"/>
<e:groupColumns startColumn="0" endColumn="9" collapse="false"/>
</e:worksheet>
</e:workbook>
raggruppa dalla riga 5 alla 10 e dalla colonna 5 alla 10 in modo che le righe siano inizialmente collassate (ma non le colonne).
Fornisce interruzioni di pagina
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet
>
<e:rowPageBreak row="4"/>
</e:worksheet>
</e:workbook
>
interrompe la pagina alla riga 5.
Fornisce l'unione delle celle
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:worksheet>
<e:mergeCells startRow="0" startColumn="0" endRow="9" endColumn="9"/>
</e:worksheet>
</e:workbook
>
unisce le celle nel range A1:J10
Se si preferisce esportare una datatable JSF esistente invece di scrivere un apposito documento XHTML, si può eseguire il componente org.jboss.seam.excel.excelExporter.export
, passando l'id della datatable come parametro Seam EL. Si presuma di avere una datatable
<h:form id="theForm">
<h:dataTable id="theDataTable" value="#{personList.personList}"
var="person">
...
</h:dataTable>
</h:form>
che si vuole visualizzare come foglio Microsoft® Excel®. Si collochi un
<h:commandLink
value="Export"
action="#{excelExporter.export('theForm:theDataTable')}"
/>
nella form e si è già finito. Si può certamente eseguire l'exporter con un pulsante, s: link oppure con un altro metodo preferito. Ci sono anche piani per un tag dedicato all'export che possa essere messo nel tag della datatable per non dover più fare riferimento all'id della datatable.
Si veda Sezione 19.14, «Font e layout» per la formattazione.
Il controllo dell'aspetto dell'output è fatto con una combinazione di attributi stile-CSS e di attributi tag. I più comuni (font, bordi, background, ecc.) sono CSS ed alcune impostazioni generali sono negli attributi tag.
Gli attributi CSS vanno in cascata dal padre ai figli e da un tag si scende in cascata attraverso classi CSS referenziate negli attributi styleClass
ed infine lungo gli attributi CSS definiti nell'attributo style
. Si può collocarli ovunque, ma ad esempio impostare la larghezza di colonna in una cella innestata dentro tale colonna ha poco senso.
Gli stylesheet esterni sono referenziati con il tag e:link. Vengono messi come figli del workbook.
|
Attributi
Elementi figli
Facets
|
<e:workbook>
<e:link URL="/css/excel.css"/>
</e:workbook
>
Fa riferimento allo stylesheet che può essere trovato in /css/excel.css
Questo gruppo di attributi XLS-CSS definisce un font ed i suoi attributi
xls-font-family |
Il nome del font. Assicurarsi che sia supportato del proprio sistema. |
xls-font-size |
La dimensione del font. Si usi un numero intero. |
xls-font-color |
Il colore dei font (si veda jxl.format.Colour ). |
xls-font-bold |
Il font deve essere in grassetto? I valori validi sono "true" and "false" |
xls-font-italic |
Il font deve essere in corsivo? I valori validi sono "true" and "false" |
xls-font-script-style |
The script style of the font (see jxl.format.ScriptStyle ). |
xls-font-underline-style |
Lo stile sottolineato del font (si veda jxl.format.UnderlineStyle ). |
xls-font-struck-out |
Il font deve essere barrato? I valori validi sono "true" e "false" |
xls-font |
Una notazione breve per impostare tutti i valori. Si collochi il nome del font in fondo e si usino i tick mark per i font separati da uno spazio, es. 'Times New Roman'. Si usi "italic", "bold" e "struckout". Esempio style="xls-font: red bold italic 22 Verdana" |
Questo gruppo di attributi XLS-CSS definisce i bordi della cella
xls-border-left-color |
Il colore del bordo del lato sinistro della cella (si veda jxl.format.Colour ). |
xls-border-left-line-style |
Lo stile di linea del bordo del lato sinistro della cella (si veda jxl.format.LineStyle ). |
xls-border-left |
Una notazione breve per impostare lo stile della linea ed il colore del lato sinistro della cella, es. style="xls-border-left: thick red" |
xls-border-top-color |
Il colore del bordo del lato alto della cella (si veda jxl.format.Colour ). |
xls-border-top-line-style |
Lo stile di linea del bordo del lato alto della cella (si veda jxl.format.LineStyle ). |
xls-border-top |
Una notazione breve per impostare lo stile della linea ed il colore del lato alto della cella, es. style="xls-border-top: red thick" |
xls-border-right-color |
Il colore del bordo del lato destro della cella (si veda jxl.format.Colour ). |
xls-border-right-line-style |
Lo stile di linea del bordo del lato destro della cella (si veda jxl.format.LineStyle ). |
xls-border-right |
Una notazione breve per impostare lo stile della linea ed il colore del lato destro della cella, es. style="xls-border-right: thick red" |
xls-border-bottom-color |
Il colore del bordo del lato basso della cella (si veda jxl.format.Colour ). |
xls-border-bottom-line-style |
Lo stile di linea del bordo del lato basso della cella (si veda jxl.format.LineStyle ). |
xls-border-bottom |
Una notazione breve per impostare lo stile della linea ed il colore del lato basso della cella, es. style="xls-border-bottom: thick red" |
xls-border |
Una notazione breve per impostare lo stile della linea ed il colore per tutti i lati della cella, es. style="xls-border: thick red" |
Questo gruppo di attributi XLS-CSS definisce il background della cella
xls-background-color |
Il colore del background (si veda jxl.format.LineStyle ). |
xls-background-pattern |
Il pattern del background (si veda jxl.format.Pattern ). |
xls-background |
Una notazione breve per impostare il pattern ed il colore del background. Vedere sopra per le regole. |
Questo gruppo di attributi XLS-CSS definisce le larghezze di colonna, ecc.
xls-column-width |
La larghezza della colonna. Si usino valori ampi (~5000) per cominciare. Usata da e:column nella modalità xhtml. |
xls-column-widths |
La larghezza della colonna. Si usino valori ampi (~5000) per cominciare. Usata dall'excel exporter, collocato nell'attributo style della datatable. Si usino valori numerici o * per bypassare una colonna. Esempio style="xls-column-widths: 5000, 5000, *, 10000" |
xls-column-autosize |
Deve essere fatto un tentativo per autodimensionare la colonna? I valori validi sono "true" and "false". |
xls-column-hidden |
La colonna deve essere nascosta? I valori validi sono "true" e "false". |
xls-column-export |
La colonna deve essere mostrata nell'esportazione? I valori validi sono "true" e "false". Il valore di default è "true". |
Questo gruppo di attributi XLS-CSS definisce le proprietà della cella
xls-alignment |
L'allineamento del valore della cella (si veda jxl.format.Alignment ). |
xls-force-type |
Il tipo forzato dei dati della cella. Il valore è una stringa che può essere una tra "general", "number", "text", "date", "formula" o "bool". Il tipo è automaticamente individuato e quindi quest'attributo si usa raramente. |
xls-format-mask |
La maschera di formato della cella, si veda Sezione 19.6.2, «Maschere per il formato» |
xls-indentation |
L'indentazione del valore della cella. Il valore è numerico. |
xls-locked |
Se la cella debba essere bloccata. Da usare con il livello workbook bloccato. I valori validi sono "true" e "false". |
xls-orientation |
L'orientamento del valore della cella (si veda jxl.format.Orientation ). |
xls-vertical-alignment |
L'allineamento verticale del valore della cella (si veda jxl.format.VerticalAlignment ). |
xls-shrink-to-fit |
I valori della cella devono adattarsi alla dimensione? I valori validi sono "true" e "false". |
xls-wrap |
La cella deve contenere nuove linee? I valori validi sono "true" e "false". |
L'exporter delle datatable impiega gli stessi attributi xls-css come documento xhtml con l'eccezione che le larghezze di colonna vengono definite con l'attributo xls-column-widths
nella datatable (poiché UIColumn non supporta gli attributi style o styleClass).
Nell'attuale versione ci sono alcune note limitazioni riguardanti il supporto CSS.
Usando i documenti xhtml, gli stylesheet devono fare riferimento tramite il tag <e:link> tag
Usando l'exporter delle datatable, i CSS devono essere inseriti negli attributi style, gli stylesheet esterni non sono supportati
Ci sono solo due chiavi di resource bundle usate, entrambe per il formato di data invalido ed entrambi prendono un parametro (il valore chiave)
org.jboss.seam.excel.not_a_number
— Quando un valore supposto essere un numero non può essere trattato come tale
org.jboss.seam.excel.not_a_date
— Quando un valore supposto essere una data non può essere trattato come tale
Il nucleo delle funzionalità the Microsoft® Excel® spreadsheet application è basato sull'eccellente libreria JExcelAPI che può essere trovata in http://jexcelapi.sourceforge.net/ e la maggior parte delle funzionalità e le possibili limitazioni sono ereditate da qua.
Se si usano il forum o la mailing list, si prega di ricordare che non questi non possono fornire informazioni su come Seam impiega la loro libreria, ogni problema dovrebbe essere riportato in JBoss Seam JIRA sotto il modulo "excel".