利用Grails Export插件 导出数据(原创)

    技术2022-05-20  45

    最近做一个小项目,碰到这个需求,Java的POI貌似在Grails下不太好用。

    于是研究了官方网站Export插件,正好帮我解决了这个问题,以下和大家分享下我的经验和心得

     

    当然 如果你没有Grails 的 Export插件, 你就可能需要事先安装和配置:

     

    安装插件命令:grails install-plugin export

    然后在你的Project下面的config里面配置,

    在grails.mime.types=[]内加入信息如下:

     

    csv: 'text/csv',

    pdf: 'application/pdf',

    rtf: 'application/rtf',

    excel: 'application/vnd.ms-excel',

    ods: 'application/vnd.oasis.opendocument.spreadsheet',

     

     

    You can customize the labels displayed on the export bar by adding the following lines to grails-app/i18n/messages.properties:

     

    default.csv=CSV default.excel=Excel default.pdf=PDF default.rtf=RTF default.xml=XML default.ods=ODS

     

    然后在你需要到处数据的页面,加入如下标签:

     

    <export:resource />

    <export:formats />

    或者可选:

    <export:formats formats="['csv', 'excel', 'ods', 'pdf', 'rtf', 'xml']" />

     

     

     然后在你对应的Controller中加入:

     

    1.导出字段名根据你数据库的字段命名,且无序:

    def exportService //导入export

     

    if(params?.format && params.format != "html"){

            response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]

            response.setHeader("Conten-disposition","attachment:filename=vaccines.${params.extension}")

            exportService.export(params.format,response.outputStream,Vaccine.list(params),[:],[:])

     

     

    2.根据自己命名和顺序来排列字段,例如:

     

     

              if(params?.format && params.format != "html"){

              response.contentType = ConfigurationHolder.config.grails.mime.types[params.format]

              response.setHeader("Conten-disposition","attachment:filename=vaccines.${params.extension}")

     

              List fields = ["address","parents","name","dateOfBirth","sex"]

              Map labels = ["address":"家庭地址","parents":"家长姓名","name":"儿童姓名","dateOfBirth":"出生时间","sex":"性别"]

     

              def upperCase ={domain,value-> //这段貌似是检查

                  return value.toUpperCase()

              }

              Map formatters = [address:upperCase]

              Map parameters = [parents:"King","column.widths":[0.2,0.3,0.5]] //这段貌似是固定格式

               exportService.export(params.format,response.outputStream,Vaccine.list(params),fields,labels,formatters,parameters)

              }

     

    3.根据检索结果导出数据,例:

    首先在需要导出的GSP页面上加入

     

    <export:resource />

    <export:formats params="${filterParams?filterParams:params}"/>

     

    controller里面和上面不同的地方在:

    exportService.export(params.format,response.outputStream,Waybill.createCriteria().list(params,filter),fields,labels,[:],[:])

     

    数据获取方式要改下,这样基本就OK了!

     

    好了,花费不到20分钟,就可以到处你的数据了。

    关于根据才查询结果来导出数据,一直还没有时间来得及实验,等系统上线后,再添加进去

    但是我还遇到一个问题,就是只能导出当前页的数据内容,无法导出所有数据。

    如有高手,请指点一二。

     

    谢谢,以上是我前几天用Grails帮朋友开的一个小软件的一些使用心得。

     

     

     


    最新回复(0)