使用Seam提供的Document Store Servlet.
几乎从引用文档中复制和粘贴,web.xml就像这样声明servlet :
<servlet>
<servlet-name>Document Store Servlet</servlet-name>
<servlet-class>org.jboss.seam.document.DocumentStoreServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Document Store Servlet</servlet-name>
<url-pattern>/seam/docstore/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
然后创建一个export.xhtml只有<s:resource>标记的文件:
<s:resource xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
data="#{myComponent.csvData}"
contentType="application/vnd.ms-excel"
fileName="#{myComponent.csvFileName}"/>
Run Code Online (Sandbox Code Playgroud)
生成用于下载页面中文件的链接<s:download>:
<s:download src="/csv/export.xhtml">
<h:outputText value="Download CSV"/>
<f:param name="param1" value="somevalue"/>
<f:param name="param2" value="someOtherValue"/>
</s:download>
Run Code Online (Sandbox Code Playgroud)
最后,组件中的实现getCsvData()和getCsvFileName()方法:
// could be byte[], File or InputStream
public InputStream getCsvData() {
// generate data to be downloaded
}
public String getCsvFileName() {
return "myfile.csv";
}
Run Code Online (Sandbox Code Playgroud)
请注意,<s:download>传播对话(除非您设置propagation=none).如果您传播对话上下文,则可能不需要传递任何参数.对于大型数据集,最好不传播会话并传递参数以选择请求范围组件中的数据.