本文提供一个基于ADF Face组件开发样例工程,工程的实现过程分为3个部分以应对Excel导出开发中常见的处理。

    1.空模版文件下载:将Excel文件视为普通文件提供下载操作。

    2.数据文件输出,将数据内容输出为Excel文件,目标文件尽在服务端内存中存在,这种方式需要对Excel文件的内容处理,需要引入响应的类库。

    3.模版文件填充数据后下载,基于服务端的物理文件为模板,将业务数据填入约定位置后提供下载,在实现方面需要为工作簿对象指定源文件输入流,并完成后续内容处理。


实现的基本思路,由ADF Faces组件触发文件下载事件,将输出流引致ManagedBean的事件处理方法中,由ManagedBean实现找到目标文件,组织数据内容,并输出文件流数据,浏览器客户端接到文件流后会完成剩余的下载过程。




第一阶段:空模版文件下载

新建立工程名为:DemoExcelExp

wKiom1i-UAiheAujAADIXEqQ2JY903.png-wh_50


创建一个JSP页面。

wKiom1i-UAiQLhFTAAA1mDDw1qg960.png-wh_50


拖入一个按钮

wKioL1i-UAjg-8csAAG5jS3qeLw788.png-wh_50


为按钮增加客户端事件:文件下载。

wKioL1i-UAmBKXJQAAHEwYO4Tlc639.png-wh_50

wKiom1i-UArzeiPhAABPlKokAF4858.png-wh_50


操作之后页面的代码内容中,增加了没有设定属性的按钮事件标签。

wKiom1i-UAqRjSOyAAHD5E0diAw841.png-wh_50


在“结构”视图中可以选中事件节点,并在属性Tab面板设定下载文件类型和文件名称。 

wKioL1i-UAugkhtPAAGIQ73pRCo646.png-wh_50


点击“Method”输入框旁边的下箭头,可以在IDE的辅助下建立管理Bean,并生成下事件的处理方法。

wKiom1i-UAzhqEXPAAFbjSP77t4786.png-wh_50

wKioL1i-UAzxQmhjAABHR9zHab0391.png-wh_50


操作完成后,JSP页面的代码为

wKiom1i-UBHi5rHmAAD7fpngPjE724.png-wh_50


现在可以准备一个目标模版文件,将其放置在管理Bean源代码所在的文件夹内即可。模板文件有1行数据,分别是Demo1,Demo2,Demo3,Demo4

wKiom1i-UBDj8bLLAAG4WzzAbyk098.png-wh_50


注意:这里需要检查JDeveloper的工程设定,确保编译过程会将Excel文件一并拷贝到输出目录中。

wKioL1i-UBPyYppTAAFKxVKudfw626.png-wh_50


修改管理Bean的事件处理代码,通过类加载资源的方式找到并读取模板文件,然后将文件内容输出至事件导入的输出流对象中。

wKioL1i-UBCCHHPRAAEEBMsAZRU583.png-wh_50


在JSP页面右键选择“Run”运行页面。

wKioL1i-UBGySvxnAAD7c9w1OMo068.png-wh_50


点击“模板下载”按钮,即可下载之前的模板文件了。

wKiom1i-UBLhOVXRAAB_fh1ISPw913.png-wh_50

wKioL1i-UBKhqKEKAAEKUSzRPKI728.png-wh_50




第二阶段:数据文件输出

加入第二个按钮:

wKiom1i-UBSBHSPRAAETkv4nKS8782.png-wh_50


输出数据文件,需要涉及到对Excel文件内容的处理,需要引入相应的类库,此处引用POI库完成Excel内容处理。

wKiom1i-UBTiR8XIAAFZdPJYMEA138.png-wh_50


修改管理Bean中的事件处理方法。

wKioL1i-UBXSH1RcAAEFJCiesu4629.png-wh_50


然后即可执行看效果了,点击第二个按钮所下载的文件,就是由管理Bean创建并输出的内容了。

wKiom1i-UBaBRlm9AAEsRJpIqM0697.png-wh_50



第三阶段:模版文件填充数据后下载


增加第三个按钮

wKioL1i-UBewo8sCAAEhqqc2O64695.png-wh_50


修改管理Bean的事件处理代码

wKiom1i-UBjDiQbWAAEVlHG5pFc393.png-wh_50


运行看到下载的文件有2行内容,第一行是模板默认写入的内容,第二行是由程序控制写入的内容。

wKioL1i-UBjQWqUJAAE2EtPh9oI000.png-wh_50