如何在JSF 2.0中制作下载文件?

时间:2012-10-03 06:47:39

标签: jsf-2

我的文件位于WebContent/WEB-INF/resources/file/theFile.pdf内,我是否可以知道如何下载显示常规下载弹出对话框的文件或在网页中呈现它(只要最简单的方法就可以使用)当用户点击页面的链接?我正在使用JSF2.0,目前使用h:outputLink下载pdf文件但没有运气,控制台输出显示我的错误:

File not found: /pages/resources/file/theFile.pdf

如何告诉JSF删除/pages并从/resources开始,因为我的文件位于资源文件夹中。

这是下载代码:

<h:outputLink value="resources/file/theFile.pdf">
  <h:graphicImage library="images" name="pdf.jpg" style="border:none"/>
</h:outputLink>

2 个答案:

答案 0 :(得分:10)

  

我在WebContent/WEB-INF/resources/file/theFile.pdf

中找到了文件

首先,/WEB-INF(和/META-INF)的内容公开可用(因为它们可能包含敏感信息,例如web.xml,标记文件,模板等)。将文件放在公共webcontent 外面 /WEB-INF

假设它现在位于WebContent/resources/file/theFile.pdf,那么您可以按如下方式链接到它:

<h:outputLink value="#{request.contextPath}/resources/file/theFile.pdf">
    <h:graphicImage library="images" name="pdf.jpg" style="border:none"/>
</h:outputLink>

对具体问题

无关,您在library上使用<h:graphicImage>属性毫无意义。另请参阅What is the JSF resource library for and how should it be used?

答案 1 :(得分:3)

尝试使用#{request.contextPath}前缀

<h:outputLink value="#{request.contextPath}/resources/file/theFile.pdf">
    <h:graphicImage library="images" name="pdf.jpg" style="border:none"/>
</h:outputLink>