2012-10-03 30 views
5

我正在使用Primefaces 3.4並試圖導出數據表與單元格內編輯。它似乎沒有工作。Primefaces 3.4 dataexporter不會導出值p:cellEditor

我也做了以下內容:

修改org.primefaces.component.export.Exporter線143,並將此:

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

這導致頂部的額外的行以及一個額外的列的實際單元格的右邊與數據。使用Excel文件是可以的,因爲它們不是「可見的」,但PDF看起來很糟糕。

  1. 有沒有辦法讓PF 3.4在不改變源代碼的情況下支持這個?
  2. 如果上述答案是否定的,我可以在沒有額外的行/列的情況下生成PDF嗎?

回答

5

有沒有一種方法,使PF 3.4支持此不改變源代碼?

不需要。您必須提供自定義Exporter實施/覆蓋。我已經在幾個月前將此報告爲issue 4013。它不僅提到了CellEditor,而且還提供了HtmlGraphicImage(我們使用圖像來顯示布爾狀態,我們希望在PDF/XML/XLS/CSV報告中顯示其alt)。

所有你能做的就是把票投給它,這樣它會希望得到更多的關注,或者通過重新詢問它PF forum


如果答案上面是否定的,我可以讓沒有額外的行/列獲得所產生的PDF?

您可以通過設置exportable="false"屬性來隱藏導出的列。

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

關於你的答案的第二部分,這是偉大的,並刪除額外的列,但我不知道爲什麼我有一個空的行導出時使用PDF在表的頂部。上面的Kerem的回覆表明headerText不被支持。這是由這個造成的? – javaMS

3

有沒有一種方法,使PF 3.4支持此不改變源代碼?

是的。有一種變通方法

讓你列的兩個副本。 第一個是爲用戶和第二個爲dataExporter

通過在第一列設置exportable="false",從dataExporter隱藏它。

通過在第二列設置style="display: none",從用戶隱藏。

順便說一下,dataExporter不支持headerText,所以如果你需要你的headerText導出,你必須使用舊樣式<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> 

但這解決辦法難看,讓您的dataTable兩次在規模和很難呈現

正如BalusC所提到的,我們需要通過投票或在論壇發帖來提高人們對這個問題的認識。

+0

感謝您的回答。不幸的是,我不認爲這是一種很好的做事方式,因爲在我擁有的每個頁面中維護雙表的工作量相對較大。更不用提你提到的設計視角了。 – javaMS

0

答案是...創建數據表單元格編輯器....

,並創建另一個表沒有單元編輯器之後,但在相同的字段爲

出口商應參考第二張表,它是! :D

問候!

1

迄今爲止我發現的唯一解決方案是讓您自己的類擴展Exporter並覆蓋方法protected String exportValue(FacesContext context, UIComponent component)。你應該只添加 else if (component instanceof CellEditor) { return exportValue(context, ((CellEditor) component).getFacet("output")); }

相關問題