java 关于项目导出功能实现过程中遇到的问题及思路历程

    接收到的需求是这样的:在对excel进行导入后马上导出这个excel中各个数据的处理结果,比如说成功失败啊,失败原因是啥之类的。

导入的excel大体就是这样的,这个备注栏则是专门在导出时显示该条数据是否导入成功。

最开始的想法是这样的:直接在导入业务结束后,返回页面之前进行导出,所以导出代码和导入是写在同一个方法里面的。因此代码是这样的

以下是在方法开头进行各种准备,顺便说一下数据在导入过程中已经准备好,在此就不完整贴出来,毕竟没必要也不合适


   下面则是导入后进行导出:


然而,在项目运行后效果是这样的

正如图所示,在我点击开始上传时就弹出了这个导出窗口,虽然后台方法都实现了,但是从用户体验来讲无疑是失败的,并且后台弹出了这个错误


百度了一下,很可能是因为jsp页面out对象与我使用的poi工具使用的输出流冲突了,虽然这个报错并不影响程序运行。再三思考下,我决定换个写法:在类中新建一个export的方法,不再将导入导出写在同一个方法内,将导出对象设为全局对象,并且设置一个exportFlag作为进行前后台的交互标记。在导入行为结束后,将exportFlag赋值为1,然后jsp页面写入一个隐藏域接受exportFlag,当值为一时执行导出方法。代码如下:
这是定义全局变量

这是导出方法,在导入方法时便将exportFlag设为1了,值得注意的是在导出结束后记得重新设置exportFlag的值

另一个方法

这是接受exportFlag的隐藏域

然后是jquery执行方法

最后运行项目,确实可以在导入结束刷新页面后执行导出,committed错误也没有报了,导出的结果也正确。然而在我进行第二次导出测试的时候,项目报错了

经过多次项目重启测试,第二次导出都会报这个错误,而且也无法导出。百度了一下,原因大抵是流被关闭了,导致想要再次引用这个对象时发生错误。我去poi工具类稍微看了下,确实它在捕获异常时有个finally方法关闭了流。

想了一下,既然是这样那么就不能将导出对象设为全局变量,应该是写在导出方法内部,不过这样的或数据的获取就需要采用另一种方法了,不能采用excel.addCell()这个方法来设置excel数据了,最后选择定义一个全局的list对象,并且根据网上的意见加了个return null;代码如下:

这是全局list,list数据同样是在导入过程中设置,在此不详述

这是新的导出方法

注意有个list.clear()方法清空list,不然会导致list一直增长,导出数据错误。到此为此差不多了,多次测试也没发现其它问题。

第一次写博客不足之处还请见谅,而且贴的都是代码片段看着估计也很累,毕竟是公司项目,不可能贴完整代码的,嗯,就这样吧。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值