2012-10-03 8 views
5

Sto utilizzando Primefaces 3.4 e sto provando ad esportare una tabella di dati con la modifica in-cell. Non sembra funzionare.Primefaces 3.4 dataexporter non esporta valori p: cellEditor

Ho fatto quanto segue:

Modificato org.primefaces.component.export.Exporter linea 143 e ha aggiunto questo:

else if (component instanceof CellEditor) { // Handle in-cell editable datatables 
    return exportValue(context, ((CellEditor) component).getFacet("output")); 
} 

Questo sta causando una riga in più sulla parte superiore così come una colonna in più per il diritto delle cellule effettivi con dati. Con i file Excel va bene perché non sono "visibili", ma il PDF ha un aspetto negativo.

  1. C'è un modo per fare in modo che PF 3.4 supporti questo senza modificare il codice sorgente?
  2. Se la risposta a quanto sopra è negativa, posso generare il PDF senza la riga/colonna aggiuntiva?

risposta

5

C'è un modo per rendere PF 3.4 Supporta questo senza modificare il codice sorgente?

No. Hai per fornire la vostra abitudine Exporter implementazioni/sostituzioni. Ho già segnalato questo come issue 4013 diversi mesi fa. Non menziona solo CellEditor, ma anche HtmlGraphicImage (stiamo usando le immagini per mostrare stati booleani, di cui ci piacerebbe mostrare alt nei rapporti PDF/XML/XLS/CSV).

Tutto quello che puoi fare è votare per questo in modo che si spera possa ottenere più attenzione, o ri-chiedendolo su PF forum.


Se la risposta a quanto sopra è negativo, posso fare il PDF generato ottenere senza la riga/colonna aggiuntiva?

È possibile nascondere una colonna da esportazione impostando l'attributo exportable="false".

<p:column exportable="false"> 
+0

Per quanto riguarda la seconda parte della tua risposta, è grandioso e ho rimosso la colonna in più, ma non so perché ho una riga vuota quando esporti usando PDF nella parte superiore della tabella. La risposta di Kerem sopra suggerisce che headerText non è supportato. La fila è causata da questo? – javaMS

3

C'è un modo per rendere PF 3.4 Supporta questo senza modificare il codice sorgente?

Sì. C'è una soluzione alternativa

Crea due copie della colonna. Il primo è per gli utenti e il secondo è per dataExporter.

Impostando exportable="false" nella prima colonna, nascondilo da dataExporter.

Impostando style="display: none" nella seconda colonna, nasconderlo dagli utenti.

Dal modo in cui dataExporter non supporta headerText quindi se hai bisogno dell'intestazioneTesto esportato devi usare il vecchio stile <f:facet name="header">.

<p:column headerText="CLOSE DATE" exportable="false"> 
    <p:cellEditor> 
     <f:facet name="output"> 
      <h:outputText value="#{sale.closedate}"/> 
     </f:facet> 
     <f:facet name="input"> 
      <h:inputText value="#{sale.closedate}"/> 
     </f:facet> 
    </p:cellEditor> 
</p:column> 

<p:column style="display: none"> 
    <f:facet name="header"> 
     CLOSE DATE 
    </f:facet> 
    <h:outputText value="#{sale.closedate}"/> 
</p:column> 

Ma questa soluzione è semplicemente brutto e rende il vostro dataTable due volte in termini di dimensioni e difficile da rendere.

Come menzionato da BalusC, dobbiamo aumentare la consapevolezza riguardo a questo problema votando o pubblicando nel loro forum.

+0

Grazie per la risposta. Sfortunatamente non ritengo che questo sia un buon modo di fare le cose a causa della quantità relativamente grande di lavoro necessario per mantenere tavoli doppi in ogni pagina che ho. Per non parlare della prospettiva progettuale che hai menzionato. – javaMS

0

la risposta è ... creare una tabella di dati con l'editor cellulare ....

e dopo creare un altro tavolo senza editor di cellulare, ma gli stessi campi in un

l'esportatore deve essere riferimento al secondo tavolo, ed è! : D

saluti!

1

L'unica soluzione che ho trovato finora è quella di creare la propria classe che estenda Exporter e di sovrascrivere il metodo protected String exportValue(FacesContext context, UIComponent component). Devi solo aggiungere else if (component instanceof CellEditor) { return exportValue(context, ((CellEditor) component).getFacet("output")); }

Problemi correlati