使用jboss seam生成并下载文件

时间:2011-05-27 09:51:55

标签: file java-ee jboss download seam

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

2 个答案:

答案 0 :(得分: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>

然后创建仅包含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}"/>

使用<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>

最后,在您的组件中实施getCsvData()getCsvFileName()方法:

// could be byte[], File or InputStream
public InputStream getCsvData() {
    // generate data to be downloaded
}

public String getCsvFileName() {
   return "myfile.csv";
}

请注意<s:download>传播会话(除非您设置propagation=none)。如果您传播对话上下文,则可能不需要传递任何参数。对于大型数据集,最好不传播会话并传递参数以选择请求范围组件中的数据。

答案 1 :(得分:0)

有两种方法:

1)检查Seam文档以获取有关使用Seam-Excel以编程方式生成文件的信息,然后使用CSV的mime类型集将其写出来 - 这些都在文档中详细说明。

但是,我无法在最新版本的Seam中使用它,因为它需要一个响应对象,它曾经在Seam上下文中可用但现在只返回null。

2)将您想要的CSV文件编码为Excel xhtml模板(请参阅Seam文档和示例项目),然后使用标记将其渲染为正常。

我经常这样做,效果很好,禁止你不能提供文件名。

HTH。