Problème d’export Excel avec le Datatable exporter de Seam
Seam permet d’exporter très simplement des dataTable JSF en CSV ou en Excel. Pour cela il suffit de déclarer une dataTable et un lien qui fait référence au bon composant Seam :
<h:form id="theForm"> <h:dataTable id="theDataTable" value="#{personList.personList}" var="person"> ... </h:dataTable> </h:form> ... <h:commandLink value="Export" action="#{excelExporter.export('theForm:theDataTable')}" />
Cette fonctionnalité est très pratique mais lorsqu’il y a un problème il est parfois très compliqué de trouver l’erreur. J’ai ainsi découvert par hasard que les colonnes doivent être composées de composants JSF et non de chaines de caractères simples pour apparaître dans l’export. Dans l’exemple suivant, seule la première colonne apparaîtra dans l’export :
<h:form id="theForm"> <rich:dataTable id="theDataTable" value="#{personList.personList}" var="person"> <rich:column> <f:facet name="header"><h:outputText value="Name"/></f:facet> <h:outputText value="#{person.name}" /> </rich:column> <rich:column> <f:facet name="header"><h:outputText value="Age"/></f:facet> #{person.age} </rich:column> </rich:dataTable> </h:form>
Pour information, ce comportement est aussi valable pour le facet header. Ce comportement est enregistré en tant que “nouvelle fonctionnalité” dans le JIRA de Seam : https://jira.jboss.org/browse/JBSEAM-3213