WebWork實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出CSV文本
以往,在WebWork中實(shí)現(xiàn)導(dǎo)出CSV文本時,采用的是之前自己實(shí)現(xiàn)的csv result,但是這個實(shí)現(xiàn)有個缺陷就是對象嵌套不支持,而且需要構(gòu)造dto遍歷獲取列表進(jìn)行列表字段顯示的封裝,且在WebWork配置文件要羅列出需要導(dǎo)出的字段,過于繁瑣。
于是產(chǎn)生了采用直接用freemarker作為導(dǎo)出CSV文本文件模板的想法,這樣后臺只做查詢列表數(shù)據(jù)的獲取,WebWork配置文件只需要定位到指定freemarker模板,而且導(dǎo)出排版可以在freemarker中更靈活的得到控制。
其中,WebWork在導(dǎo)出CSV文本過程中,中文亂碼問題上尤其需要注意的是,一定要設(shè)置模板文件的編碼。
以下是實(shí)現(xiàn)實(shí)例:
- 1 public String sampelExport()throws Exception{
- 2 samplelist = SampleService.getAll();
- 3 return SUCCESS;
- 4}
//samplelist的getter不要忘記哦。
SampleObject具有name屬性,類型為String,createDate屬性,類型為java.util.date,emails屬性,類型為java.util.list,為一個email封裝對象列表,status屬性,類型為Enum,提供按locale獲取顯示內(nèi)容方法。
- 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〉
- 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〉
【編輯推薦】