Web应用程序通常需要提供链接供用户下载文件,例如费用报告。Seam 2.1.2.CR1通过s:resource和s:download标签的组合,使得向用户提供服务文件的任务变得简单且遵循RESTful原则。但在使用这些标签之前,我们需要进行一些简单的配置。
s:resource标签使用Seam的DocumentStore来提供服务(或推送)文档。您需要将此servlet配置到web.xml中
web.xml
<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>
单独在一页中,s:resource将通过定义获取文件数据和元数据的位置来充当文件下载提供者。您使用它替代HTML(不在HTML内部),因为目的是提供文档而不是网页。因此,页面模板可能看起来像这样。
resources.xhtml
<s:resource xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" data="#{fileResourceProvider.data}" contentType="#{fileResourceProvider.contentType}" fileName="#{fileResourceProvider.fileName}" />
- data是实际文件数据。它可能是一个java.util.File,一个InputStream或一个byte[]。
- contentType(例如,
image/jpeg
) - filename(例如,someFile.jpg),它很可能会在用户的文件下载提示中显示
其他属性在Seam参考文档中描述。
如果我们想让resources.xml为我们提供所有文档(或至少由fileResourceProvider组件处理的那些),我们需要传递一个或多个参数给它,以便它可以加载给定请求的文档信息和数据。我们通过使用请求参数(例如,http://localhost/app/resources.seam?fileId=1)来实现这一点。至少有两种方法将包含文件ID的参数传递到fileResourceProvider组件。您可以使用@RequestParameter注解;
@RequestParameter private Long fileId;
或者通过pages.xml注入它
<page view-id=”/resources.xhtml”> <param name="fileId" value="#{fileResourceProvider.fileId}"/> </page>
采取第一种方法,FileResourceProvider.java将定义如下
@Name("fileResourceProvider") @Scope(ScopeType.EVENT) public class FileResourceProvider { @RequestParameter private Long fileId; private String fileName; private String contentType; private byte[] data; @Create public void create() { FileItem item = em.find(FileItem.class, fileId); // Get document representation this.fileName = item.getFileName(); this.data = item.getData(); this.contentType = item.getContentType(); } //.. getters setters }
这就是以RESTful方式提供文档所需的所有内容。为了使创建下载链接更加简单,您可以使用s:download标签。以下是它的用法
<s:download src=”/resources.xhtml”> <f:param name=”fileId” value=”#{someBean.downloadableFileId}”/> </s:download>
“s:download”标签是Seam中“s:link”标签的一种变体。它将生成一个类似以下链接的可书签链接:http://localhost/resources.seam?fileId=1。您可以使用Seam URL重写功能将链接转换为:http://localhost/resources/1。更多示例请参考Seam发行包中的“examples/ui”目录以获取进一步指导!