使用jboss seam生成并下载文件

lau*_*ben 1 jboss seam file download java-ee

我需要使用seam为现有的Web应用添加"导出"功能.目的是将搜索结果导出到csv文件.我没有生成csv的问题,但我不知道如何将csv发送回用户.我不想将csv存储在服务器上,因为这将是腰部存储空间.我怎么能在jboss接缝中实现这个目标?

Ste*_*lli 5

使用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).如果您传播对话上下文,则可能不需要传递任何参数.对于大型数据集,最好不传播会话并传递参数以选择请求范围组件中的数据.