﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-樂於JAVA-文章分类-struts2</title><link>http://www.blogjava.net/HappyJava/category/34720.html</link><description>幸福人生(J2EE)</description><language>zh-cn</language><lastBuildDate>Fri, 19 Sep 2008 12:06:31 GMT</lastBuildDate><pubDate>Fri, 19 Sep 2008 12:06:31 GMT</pubDate><ttl>60</ttl><item><title>Struts2利用stream直接输出Excel</title><link>http://www.blogjava.net/HappyJava/articles/229873.html</link><dc:creator>李建軍</dc:creator><author>李建軍</author><pubDate>Fri, 19 Sep 2008 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/HappyJava/articles/229873.html</guid><wfw:comment>http://www.blogjava.net/HappyJava/comments/229873.html</wfw:comment><comments>http://www.blogjava.net/HappyJava/articles/229873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/HappyJava/comments/commentRss/229873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/HappyJava/services/trackbacks/229873.html</trackback:ping><description><![CDATA[在利用网页展示查询结果时，经常会遇到要求导出成Excel的需求。采用这种方法可以定制输出的格式和内容（还不支持合并单元格和公式），生成真正的Excel格式（不是csv）的Excel。<br />
一、struts.xml<br />
&lt;?&nbsp;xml version="1.0" encoding="UTF-8"&nbsp;?&gt;<br />
&lt;!DOCTYPE struts PUBLIC<br />
&nbsp;&nbsp;&nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />
&nbsp;&nbsp;&nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;<br />
&nbsp;&nbsp; <br />
&lt;struts&gt;
<p>&nbsp;&nbsp;&nbsp; &lt;constant name="struts.i18n.encoding" value="UTF-8"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;package name="demo" extends="struts-default"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action name="excel" method="execute" class="demo.ExcelAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result name="excel" type="stream"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="contentType"&gt;application/vnd.ms-excel&lt;/param&gt;&nbsp;&nbsp;&nbsp; &lt;!-- 注意这里的ContentType --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="inputName"&gt;excelStream&lt;/param&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 这里需要和Action里的变量名一致 --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="contentDisposition"&gt;filename="standard.xls"&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="bufferSize"&gt;1024&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/result&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/action&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/package&gt;<br />
&lt;/struts&gt;</p>
<p>二、Struts2的 Action</p>
<p>package demo;<br />
public class ExcelAction {<br />
&nbsp;&nbsp;&nbsp; private InputStream excelStream; // 需要生成getter和setter</p>
<p>&nbsp;&nbsp;&nbsp; public String execute() throws Exception {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer excelBuf = new StringBuffer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excelBuf.append("BookName").append("\t").append("Year").append("\t").append("author").append("\n");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excelBuf.append("Thinking in Java").append("\t").append("2001").append("\t").append("Eckel").append("\n");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excelBuf.append("Spring in action").append("\t").append("2005").append("\t").append("Rod").append("\n");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String excelString = excelBuf.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("result excel String: " + excelString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; excelStream = new ByteArrayInputStream(excelString.getBytes(), 0, excelString.length());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "excel";<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; // getter and setter<br />
&nbsp;&nbsp;&nbsp; ...<br />
}</p>
<p>三、Jsp页面</p>
<p>&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;<br />
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp; &lt;s:head /&gt;<br />
&nbsp;&lt;/head&gt;</p>
<p>&nbsp;&lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;s:form action="" method="post"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:submit key="button.submit"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/s:form&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;</p>
<img src ="http://www.blogjava.net/HappyJava/aggbug/229873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/HappyJava/" target="_blank">李建軍</a> 2008-09-19 09:57 <a href="http://www.blogjava.net/HappyJava/articles/229873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>