Lo <p:cellEditor>
non viene riconosciuto dagli esportatori di dati standard PrimeFaces. Ho già segnalato questo ai ragazzi PF come issue 4013 con un esempio che non menziona solo CellEditor
, ma anche HtmlGraphicImage
(stiamo usando le immagini per mostrare gli stati booleani, di cui ci piacerebbe mostrare alt
in PDF/XML/XLS/Rapporti CSV).
In primo luogo, creare una nuova classe che estende lo standard PDFExporter
piace segue:
public class ExtendedPDFExporter extends PDFExporter {
@Override
protected String exportValue(FacesContext context, UIComponent component) {
if (component instanceof CellEditor) {
return exportValue(context, ((CellEditor) component).getFacet("output"));
}
else if (component instanceof HtmlGraphicImage) {
return (String) component.getAttributes().get("alt");
}
else {
return super.exportValue(context, component);
}
}
}
Quindi, per utilizzarlo, lo chiamano a livello di codice, invece di via <p:dataExporter>
.
<p:dataTable binding="#{table}" editable="true" ...>
<p:column><p:cellEditor>...</p:cellEditor></p:column>
<p:column><p:cellEditor>...</p:cellEditor></p:column>
<p:column><p:cellEditor>...</p:cellEditor></p:column>
<p:column exportable="false"><p:rowEditor /></p:column>
</p:dataTable>
<h:commandLink value="PDF" action="#{bean.exportPDF(table, 'filename')}" />
Con
public void exportPDF(DataTable table, String filename) throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
Exporter exporter = new ExtendedPDFExporter();
exporter.export(context, table, filename, false, false, "UTF-8", null, null);
context.responseComplete();
}
Sentitevi liberi di trovare la tabella dei dati da UIComponent#findComponent()
, invece, e per impostare il nome del file in un solo metodo di azione. Il codice sopra è solo esemplare.
Senza mostrare alcun codice, temo che sarà difficile per chiunque fornire aiuto. –