You smiled and talked to me of nothing and I felt that for this I had been waiting long.

The trees come up to my window like the yearning voice of the dumb earth.

BlogJava 首页 新随笔 联系 聚合 管理
  19 Posts :: 10 Stories :: 25 Comments :: 0 Trackbacks
以往,在webwork中实现导出数据为csv文本时,采用的是之前自己实现的csv result,但是这个实现有个缺陷就是对象嵌套不支持,而且需要构造dto遍历获取列表进行列表字段显示的封装,且在webwork配置文件要罗列出需要导出的字段,过于繁琐。
于是产生了采用直接用freemarker作为导出csv文件模板的想法,这样后台只做查询列表数据的获取,配置文件只需要定位到指定freemarker模板,而且导出排版可以在freemarker中更灵活的得到控制。
其中,在中文乱码问题上尤其需要注意的是,一定要设置模板文件的编码。
以下是实现实例:

1 
2 public String sampelExport()throws Exception{
3     samplelist = SampleService.getAll();
4     return SUCCESS;
5 }

//samplelist的getter不要忘记哦。

SampleObject具有name属性,类型为String,createDate属性,类型为java.util.date,emails属性,类型为java.util.list,为一个email封装对象列表,status属性,类型为Enum,提供按locale获取显示内容方法。

1 <action name="sampleexport" method="sampleExport"
2      class="org.hook.webwork.SampleExportAction">
3      <result type="freemarker" name="success">
4          template/default/sampleexport.ftl
5      <result>
6 </action>
7 

1 <#ftl encoding="GBK"> 
2 <#if response?exists>${response.setHeader("Content-Disposition","attachment; filename=sample_export.csv")}${response.setHeader("Cache-  Control", "cache")}${response.setContentType("text/plain; charset=GBK")}${action.getText('org.hook.sampleobject.name')},
${action.getText('org.hook.sampleobject.createdate')},${action.getText('org.hook.sampleobject.emails')},
${action.getText('org.hook.sampleobject.status')}
</#if>
3 <#if samplelist?exists>
4 <#list samplelist as sampleobject>"${sampleobject.name}","${sampleobject.createDate?date}","<#list sampleobject.emailss as email>${email.fullinfo} </#list>",<#if sampleobject.status?exists&&sampleobject.status.getValue(locale)?exists>
${sampleobject.status.getValue(locale)}</#if>
5 </#list>
6 </#if>
注意:没有行号的地方说明代码不要换行,要不导出的文件位置会有误差。
posted on 2008-11-07 10:41 钩子 阅读(1556) 评论(0)  编辑  收藏 所属分类: jeeopensources工作笔记

只有注册用户登录后才能发表评论。


网站导航: