tabla showcase registros listar dataexporter customize consulta buscar jsf primefaces datatable data-export

jsf - showcase - p: dataExporter no reconoce p: cellEditor



primefaces showcase (2)

El <p:cellEditor> hecho no es reconocido por los exportadores de datos estándar PrimeFaces. Anteriormente informé esto a los chicos de PF como el número 4013 con un ejemplo que no solo menciona CellEditor , sino también HtmlGraphicImage (estamos usando imágenes para mostrar estados booleanos, cuya alt queremos mostrar en PDF / XML / XLS / Informes CSV).

Primero, cree una nueva clase que extienda el PDFExporter estándar de la siguiente manera:

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); } } }

Luego, para usarlo, llámalo programáticamente en lugar de a través de <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(); }

Siéntase libre de encontrar la tabla de datos por UIComponent#findComponent() lugar y establecer el nombre del archivo en el método de acción solamente. El código anterior es solo ejemplar.

Tengo un <p:dataTable> con <p:cellEditor> y quiero exportar el contenido de esa tabla al formato PDF usando <p:dataExporter> .

He incluido el itext 2.1.7 jar . Obtuve el resultado en PDF pero muestra los valores de Object#toString() de todos los componentes <p:cellEditor> manera:

org.primefaces.component.celleditor.CellEditor@1bd59e1

¿Cómo exporto los valores de salida de <p:cellEditor> lugar?


Estoy de acuerdo, también encuentro que este enfoque para personalizar el comportamiento del Exportador es el más flexible y el menos doloroso.

¿Alguien interesado en usar los métodos preProcessor / postProcessor con esto? Aquí hay un ejemplo de cómo hacer eso.

Me atreví a modificar ligeramente el método de la respuesta anterior:

public void exportPDF(DataTable table, String filename, String preProcessor, String postProcessor) throws IOException { FacesContext context = FacesContext.getCurrentInstance(); ExpressionFactory factory = context.getApplication().getExpressionFactory(); MethodExpression preProcessorME = factory.createMethodExpression( context.getELContext(), preProcessor, null, new Class[] {Object.class}); MethodExpression postProcessorME = factory.createMethodExpression( context.getELContext(), postProcessor, null, new Class[] {Object.class}); Exporter exporter = new ExtendedPDFExporter(); exporter.export(context, table, filename, false, false, "UTF-8", preProcessorMe, postProcessorME); context.responseComplete(); }

Y así es como lo usas en tu página (de nuevo, acabo de modificar el ejemplo anterior):

<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'', ''#{yourBean.preProcessPDF}'', ''#{yourBean.postProcessPDF}'')}" />

Observe que NO HAY NESTED EL STATEMENTS (que no está permitido de todos modos), los dos últimos argumentos son cadenas simples que contienen expresiones EL.