p: dataExporter non riconosce p: cellEditor

Ho un

con

e voglio esportare il contenuto di quella tabella in formato PDF usando

.

Ho incluso il jar itext 2.1.7 . Ho ottenuto l’output in PDF ma mostra i valori Object#toString() di tutti i componenti

    modo:

     [email protected] 

    Come posso esportare i valori di output di

    ?

    è in effetti riconosciuto dagli esportatori di dati standard PrimeFaces. In precedenza ho riferito questo ai ragazzi del PF come numero 4013 con un esempio che menziona non solo CellEditor , ma anche HtmlGraphicImage (stiamo usando le immagini per mostrare stati booleani, di cui vorremmo mostrare l’ alt in PDF / XML / XLS / Rapporti CSV).

    Innanzitutto, crea una nuova class che estenda il PDFExporter standard come 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 usarlo, chiamalo a livello di programmazione anziché tramite .

      ... ... ...    

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

    Sentiti libero di trovare la tabella dei dati da UIComponent#findComponent() invece e di impostare il nome del file solo nel metodo di azione. Il codice sopra è solo esemplare.

    Sono d’accordo, trovo anche questo approccio per personalizzare il comportamento dell’Esportatore il più flessibile e meno doloroso.

    Qualcuno interessato a utilizzare i metodi preProcessor / postProcessor con questo? Ecco un esempio su come farlo.

    Ho avuto il coraggio di modificare leggermente il metodo dalla risposta sopra:

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

    Ed è così che lo usi nella tua pagina (di nuovo, ho appena modificato l’esempio sopra):

      ... ... ...    

    Si noti che NON SONO NESSUN ELEMENTEMENT NESTED (che non è comunque consentito), gli ultimi due argomenti sono stringhe semplici contenenti espressioni EL.