栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在JSF中包括外部本地磁盘文件系统文件夹中的文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在JSF中包括外部本地磁盘文件系统文件夹中的文件

在此构造中至少存在两个主要错误。

首先,您不能使用使用JSP文件

<ui:include>
。它只能包含Facelets文件。JSP文件将仅被视为“普通香草” XML。此外,自JSF
2.0起 不推荐使用 JSP 。您永远都不应该考虑使用它。该
<ui:include>
也是错误的工具,以在输出嵌入PDF文件。您应该使用HTML
<iframe>
<object>
代替。

例如

<iframe src="/url/to/file.pdf" width="500" height="300"></iframe>

或更好

<object data="/url/to/file.pdf" type="application/pdf" width="500" height="300">    <a href="/url/to/file.pdf">Download file.pdf</a></object>

<a>
当所使用的浏览器不支持内联
application/pdf
HTML文档中的内容时,即未安装Adobe
Reader插件时,该链接被视为正常降级)

或者如果您碰巧使用了PrimeFaces

<p:media value="/url/to/file.pdf" width="500" height="300" />

其次,对于文件下载来说,JSP是错误的工具。JSP类似于Facelets,被设计为一种视图技术,旨在通过taglibs和EL轻松生成HTML输出。基本上,通过您的JSP方法,PDF文件中的

<html>
<body>
标签混乱不堪,因此损坏了,因此无法识别为有效的PDF文件。顺便说一句,这是使用
scriptlet 的一种不好做法的原因之一。也就是说,对于应该如何工作,它完全使您感到困惑。Facelets不支持任何形式的
scriptlet ,因此“自动”迫使您以正确的方式进行操作。在这种特殊情况下,即使用普通的Java类进行文件下载作业。

您应该改用servlet。这是一个启动示例,假设Servlet
3.0和Java 7可用:

@WebServlet("/Saba_PhBill.pdf")public class PdfServlet extends HttpServlet {    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        File file = new File("D:\TNWRD_documents\Knowladge_base\Financial_and_Administrative_powers.pdf");        response.setHeader("Content-Type", getServletContext().getMimeType(file.getName()));        response.setHeader("Content-Length", String.valueOf(file.length()));        response.setHeader("Content-Disposition", "inline; filename="Saba_PhBill.pdf"");        Files.copy(file.toPath(), response.getOutputStream());    }}

(顺便说一句,您在“ Knowladge”中遇到了严重的错别字,不确定是否与具体问题进一步相关)

只需在上面的HTML示例中替换

"/url/to/file.pdf"
"#{request.contextPath}/Saba_PhBill.pdf"
即可调用它。在
<p:media>
#{request.contextPath}
是不必要的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435658.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号