2012-10-03 65 views
5

Estoy utilizando Primefaces 3.4 e intento exportar una tabla de datos con la edición interna. No parece funcionar.El exportador de datos de Primefaces 3.4 no exporta los valores p: cellEditor

he hecho lo siguiente:

Modified org.primefaces.component.export.Exporter línea 143 y se añade esto:

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

Esto está causando una fila adicional en la parte superior, así como una columna adicional a la derecha de las celdas reales con datos. Con los archivos de Excel, está bien, ya que no son "visibles", pero el PDF se ve mal.

  1. ¿Hay alguna manera de hacer que PF 3.4 lo admita sin cambiar el código fuente?
  2. Si la respuesta a lo anterior es negativa, ¿puedo hacer que el PDF se genere sin la fila/columna adicional?

Respuesta

5

¿Hay una manera de hacer PF 3.4 apoyo sin cambiar el código fuente?

No. Tienes que proporcionar a su costumbre Exporter implementaciones/anulaciones. Ya he informado esto como issue 4013 hace varios meses. No solo menciona CellEditor, sino también HtmlGraphicImage (estamos usando imágenes para mostrar estados booleanos, cuyo alt nos gustaría mostrar en informes PDF/XML/XLS/CSV).

Todo lo que puedes hacer es votar para obtener más atención o volver a solicitarla en PF forum.


Si la respuesta a lo anterior es negativa, ¿puedo hacer el PDF conseguir genera sin la fila/columna adicional?

Puede ocultar una columna de la exportación estableciendo el atributo exportable="false".

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

En cuanto a la segunda parte de su respuesta, es genial y eliminó la columna adicional pero no sé por qué tengo una fila vacía al exportar usando PDF en la parte superior de la tabla. La respuesta de Kerem anterior sugiere que headerText no es compatible. ¿La fila es causada por esto? – javaMS

3

¿Hay una manera de hacer PF 3.4 apoyo sin cambiar el código fuente?

Sí. Hay una solución

Haga dos copias de su columna. El primero es para usuarios de y el segundo es para dataExporter.

Al establecer exportable="false" en la primera columna, ocultarlo de dataExporter.

Al configurar style="display: none" en la segunda columna, ocultarlo a los usuarios.

Por cierto, dataExporter no es compatible con headerText, por lo que si necesita que su headerText se exporte debe usar el estilo antiguo <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> 

Pero esta solución es feo llano y hace que su dataTable dos veces en tamaño y difícil de render.

Como mencionó BalusC, necesitamos crear conciencia sobre este tema votando o publicando en su foro.

+0

Gracias por la respuesta. Lamentablemente, no considero que sea una buena forma de hacer las cosas debido a la cantidad relativamente grande de trabajo que implica el mantenimiento de tablas dobles en cada página que tengo. Por no mencionar la perspectiva de diseño que mencionaste. – javaMS

0

la respuesta es ... crear una tabla de datos con el editor celular ....

y después de crear una otra mesa con ningún editor celular, pero los mismos campos en un

el exportador debe estar referencia a la segunda tabla, y lo es! : D

saludos!

1

La única solución que he encontrado hasta ahora es crear su propia clase que amplíe Exporter y anular el método protected String exportValue(FacesContext context, UIComponent component). Solo debe agregar else if (component instanceof CellEditor) { return exportValue(context, ((CellEditor) component).getFacet("output")); }

Cuestiones relacionadas