如何从Seam PDF中下载文件

时间:2009-10-19 18:12:18

标签: pdf jboss java-ee seam

在项目中,我们使用seam pdf创建pdf并将pdf存储在数据库中。

然后,用户可以搜索pdf并在其pdf查看器中查看。这是为pdf生成的代码的一小部分:

<p:html>
<a:repeat var="file" value="#{attachment.files}" rowKeyVar="row">
<s:link action="#{fileHandler.downloadById()}" value="#{file.name}" >
    <f:param  name="fileId" value="#{file.id}"/>
</s:link>
</a:repeat>

渲染pdf时,会生成一个指向以下内容的链接:

/project/skjenkebevilling/status/status_pdf.seam?fileId=42&actionMethod=skjenkebevilling%2Fstatus%2Fstatus_pdf.xhtml%3AfileHandler.downloadById()&cid=16

正如您所看到的,这个链接并没有多说,而且似乎缺少servlet路径。

如果我使用servlet路径更改/项目

localhost:8080/saksapp/skjenkebevilling/status/status_pdf.seam?fileId=42&actionMethod=skjenkebevilling%2Fstatus%2Fstatus_pdf.xhtml%3AfileHandler.downloadById%28%29&cid=16

出现下载文件对话框。所以我的问题是,有谁知道我如何输入正确的链接?为什么这个:链接似乎不起作用?

如果我不能这样做,那么我将需要以某种方式进行搜索替换和编辑pdf,但这似乎有点像黑客。

(这是在JBoss下运行)

谢谢你的时间......

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的方法。 似乎我必须使用s:链接和普通的href标签。 只有href标签由于某种原因才起作用。

<s:link action="#{fileHandler.downloadById()}" value="#{file.name}" propagation="none">
    <f:param name="fileId" value="#{file.id}"/>
</s:link>
<a href="#{servletPath.path}?fileId=#{file.id}&amp;actionMethod=#{path.replace('/','')}%2Fstatus%2Fstatus_pdf.xhtml%3AfileHandler.downloadById()&amp;">
    download
</a>

servletPath.path返回servlet路径,即http://mydomain.com/download.seam 如果您希望用户在下载文件之前登录,您可以决定将login-required = true放在download.seam上。

@Observer("org.jboss.seam.security.loginSuccessful")
public void servletPath() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    this.path = request.getRequestURL().toString().replace("login.seam", "download.seam");
}