后台创建EXCEL

用POI中的SS在后台建立EXCEL表的基本思路如下:

1 前台发送请求,传递参数(如数据表名等)

 

2 ACTION接受参数,调用CreatExcelFromDatabase类中的方法进行创建   生成临时文件

 

3 返回这个临时文件,供前台下载(或是以下载方式返回)

 

具体的创建过程又可分为三个过程:

1  取得要返回对象的属性,做为EXCEL的字段Title

2  根据参数返回记录数据

3  根据字段和记录数据生成EXCEL

 

其中第1步,我考虑了两种方法:

 A 用反射机制取得相关属性名称

 B 用Hibernate取得相关属性名称

最后发现这两种方法确实能返回某一个对象的属性名称集合,但是做EXCEL时,还要对这些字段名称进行修改,比如 legName ----> Legislation ,并且返回的字段顺序是随机的,造成字段名与值不对是对应的 ,这是最严重的错误,所以必须改用其它方法,否则做出的EXCEL表头字段看起来就很怪/

 

  想到了用XML文件来存储每个对象要建立EXCEL表的显示的字段名称,可以手动修改XML文件,通过DOM4J进行解析,虽然可以解决字段名称的问题,但是却不能解决字段与值对应的问题 (但是如果也将getter方法写入 到时一些抽取出来,两个问题就解决了,看来暂时的办法是用XML来解决问题了)

  

   忙活了一天,终于搞定了,实现前台动态请求导出EXCEL的问题,做单元测试时没有问题,但是启动服务器,从浏览器传递请求,后台能生成EXCEL 但总是向前台返回:

FileInputStream cannot be cast to String

 后来通过检查:发现是这个ACTION中有多个方法,对下载EXCEL的方法做了如下配置

   <package name="caseExport" namespace="/case" extends="struts-default">
      <action name="excel"  class="org.macaulites.action.ExportExcelAction" method="getExcelStream">
                <result name="success" type="stream">
                    <param name="contentType">application/vnd.ms-excel</param> 
                    <param name="inputName">excelStream</param>          
                    <param name="contentDisposition">attachment;filename="standard.xls"</param>
                    <param name="bufferSize">1024</param>
                </result>
        </action>	 
   </package>

 真是画蛇添足啊,去掉

 method="getExcelStream"

 就对了,只要给出了

<param name="inputName">excelStream</param>  

 框架会自动到这个ACTION中去找getExcelStream()方法的

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值