2011-06-25 48 views
2

不幸的是,OpenFaces Datatable尚未具有與Primefaces或IceFaces不同的導出功能。 雖然導出是小菜一碟,但過濾IceFaces或primefaces數據表是一些恐怖電影,然而primeFaces的過濾不適用於JSF DataModel(悲傷但真實)。如何導出Excel/CSV格式的OpenFaces數據表?

使用OpenFaces DataTable過濾是一塊蛋糕,非常方便和強大。 但是怎麼樣最終用戶誰想要導出一個他/她篩選的數據表格,如CSVMS Excel

從OpenFaces偉大的德米特里,給了我一個提示: 使用OpenFaces DataTable的方法:getDisplayedRowDatas()將抓住當前顯示的行從數據表,然後使用像iText的一些THRID庫在PDF導出例如。

在我的頭上,這應該是這樣的:

  • 爲此創建一個後臺bean。
  • 使用Apache POI到數據表中,其方法getDisplayedRowsDatas()的OpenFaces的內容導出添加的Apache POI第三庫到classpath
  • 編寫代碼 - 但恐怕這種方法不返回列的標題名稱 - 或者將由OpenFaces Datatable呈現的HTML表格作爲緩衝字符串獲取,並使用Apache POI生成一個與緩衝區流式傳輸的Excel文件。

在我近來看到的MyFaces的例子:MyFaces Datatable Export Example,開發人員使用的MyFaces組件<t:buffer value=#{myExportBean.myBufferString}> datatable here </t:buffer />到DataTable的內容轉換成一個緩衝的字符串,這使得事情變得更加容易。 JSF Core不幸的是沒有這樣的組件。

有人遇到過這個嗎?非常感謝幫助或更好的替代方案。

回答

4

您可以查看實驗DataTable導出API,該API在當前的每晚構建中可用。如果它經受住了時間的考驗,我們將正式宣佈這個API。目前,只有CSV導出功能可用,但您可以爲其他格式編寫自己的導出程序。下面是你應該把你的行動處理程序的代碼,使其工作:

DataTable myTable = Faces.component("form:myTable", DataTable.class); 
myTable.export(new CSVTableExporter()); 

它導出的數據,所有的行和列的如目前由表(只分頁表的當前頁面顯示目前導出)。

+0

感謝您的回答。知道OpenFaces的傳入版本將包含CSV導出器令人興奮。它適合我,如果它是CSV而不是excel!但是,我應該怎麼做?用每晚構建的一個替換實際的Openfaces jar(我不喜歡)。否則,我應該如何物理使用導出器API?因爲我將NBuild作爲第二個libray導入,這導致JSF實現衝突。問候 – Hanynowsky

+0

我做了正是你推薦的,我只得到表頭,但沒有導出的CSV文件中的行數據。如果表格是空的而不是這種情況。有什麼不對?我在論壇上發佈了一個問題!關注@Dmitry – Hanynowsky

+0

在論壇發帖後解決。但是,我仍然可以如何使用導出APi以及3.0。問候@Dmitry – Hanynowsky

相關問題