2

我想将数据从我的数据表导出到 Excel。

我正在使用 BootsFaces 数据表(http://showcase.bootsfaces.net/forms/DataTable.jsf ),如下所示(为简洁起见,我将其剥离):

<b:dataTable
   id="dossiers"
   value="#{bean.dossiers}"
   var="dossier">
       <b:dataTableColumn
         label="#{text['dossier.id']}"
         value="#{dossier.id}" />
       <b:dataTableColumn
         label="#{text['dossier.version']}"
         value="#{dossier.version}" />
</b:dataTable>

我尝试了两种方法:

1.第一种方法:Primefaces dataExporter

http://www.primefaces.org/showcase/ui/data/dataexporter/basic.xhtml

 <h:commandLink id="excel">
   <p:graphicImage name="img/excel.png" />
   <p:dataExporter
       type="xls"
       target="identities"
       fileName="dossiers" />
 </h:commandLink>

我已经添加了所有必要的依赖项(org.apache.poi)。 如果我使用 PrimeFaces 数据表,这可以工作,但我不喜欢它的外观并想改用 BootsFaces。当我尝试它时,我得到以下异常:

javax.servlet.ServletException:不支持的数据源目标:“net.bootsfaces.component.dataTable.DataTable”,导出器必须以 PrimeFaces 数据表为目标

2.第二种方法:DataTables.net customOptions

BootsFaces 数据表基于 jQuery 插件 DataTables.net。BootsFaces 数据表没有实现所有 jQuery 选项,但是,您可以使用customOptions属性手动添加这些选项。

您可以将自定义选项传递给 [...] 数据表和每一列。这些选项被添加到用于初始化数据表的 Json 对象中。

DataTables.net 具有以下文件导出选项:

https://datatables.net/extensions/buttons/examples/initialisation/export.html

$(document).ready(function() {
    $('#example').DataTable( {
        dom: 'Bfrtip',
        buttons: [
            'copy', 'csv', 'excel', 'pdf', 'print'
        ]
    } );
} );

所以现在我尝试在我的数据表中添加这个数据导出选项,如下所示:

<b:dataTable
   id="dossiers"
   value="#{bean.dossiers}"
   var="dossier"
   customOptions="dom: 'Bfrtip', buttons: ['excel']"> // **ADDED HERE**
       <b:dataTableColumn
         label="#{text['dossier.id']}"
         value="#{dossier.id}" />
       <b:dataTableColumn
         label="#{text['dossier.version']}"
         value="#{dossier.version}" />
</b:dataTable>

不幸的是,这也不起作用。我的数据表仍然显示,但实际上所有选项现在都消失了(没有更多的分页,没有更多的搜索栏等)。

我已经尝试过使用和不使用额外的数据表 BUTTONS 依赖项。

<dependency>
   <groupId>org.webjars.npm</groupId>
   <artifactId>datatables.net-buttons</artifactId>
   <version>1.2.2</version>
</dependency>

有人对如何从 BootsFaces 数据表中导出我的数据有任何建议吗?

我献上永恒的感激之情!

编辑:解决方案

正如 Stephan Rauh(来自 Bootsfaces)所建议的那样,我使用了标准数据表并自己添加了功能。

重要提示:为了完成这项工作,请使用类作为选择器,而不是 id!

<h:dataTable                                        
    value="#{bean.dossiers}"
    var="dossier"
    styleClass="dossiers"> <!--class is used as selector-->
        <h:column>
            <f:facet name="header">
               <h:outputText value="#{text['dossier.id']}" />
            </f:facet>
                <h:outputText value="#{dossier.id}" />
        </h:column>
        <h:column>
            <f:facet name="header">
               <h:outputText value="#{text['dossier.version']}" />
            </f:facet>
                <h:outputText value="#{dossier.version}" />
        </h:column>
<h:dataTable>

在我的文件的开头:

<!-- Add all the required script sources, see: https://datatables.net/extensions/buttons/examples/initialisation/export.html -->
<script type="text/javascript">
    $(document).ready(function() {
        $('.dossiers').DataTable( {
             dom: 'Bfrtip',
             buttons: [
                 'copy', 'csv', 'excel', 'pdf'
             ]     
        } );
    } );
</script>
4

2 回答 2

0

目前,在b:dataTable. 这包括当前版本 0.9.1 和即将发布的版本 1.0。

但是,您应该能够自己添加这样的功能。您的第二种方法看起来很有希望。b:dataTable基于托管在 Datatables.net 上的数据表。反过来,这个小部件具有添加 CSV、PDF 和 Excel 导出的扩展。目前,我们没有在 BootsFaces 中包含此扩展,因此您必须自己添加相应的 JavaScript 文件。以下是 DataTables.net 导出器 API 的说明:https ://datatables.net/extensions/buttons/examples/initialisation/export.html 。

于 2016-11-08T14:29:34.260 回答
0

Bootsfaces 现在可以将数据表导出到 excel (xlsx)。

<b:dataTable value="#{carPool.carPool}" var="car" excel="true"...

https://showcase.bootsfaces.net/forms/DataTable.jsf#buttons_and_row_classes

于 2018-02-25T14:48:16.893 回答