我已经使用将JSP页面包含到Facelets中<ui:include>
。在JSP页面中,我可以获取PDF,但是它将内容显示为纯文本。这是怎么引起的,我该如何解决?
JSP页面:
<html>
<%@page import="java.io.File"%>
<%@page import="java.io.*"%>
<body>
<%
response.reset();
File file = new File(
"D:\\TNWRD_Documents\\Knowladge_Base\\Financial_and_Administrative_powers.pdf");
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Disposition","inline;filename=Saba_PhBill.pdf");
response.setContentLength((int)file.length());
//OPen an input stream to the file and post the file contents thru the
//servlet output stream to the browser
FileInputStream in = new FileInputStream(file);
ServletOutputStream outs = response.getOutputStream();
response.setContentLength(in.available());
byte[] buf = new byte[8192];
int c=0;
try {
while ((c = in.read(buf, 0, buf.length)) > 0)
{
//System.out.println("size:"+c);
outs.write(buf, 0, c);
}
} catch (IOException ioe) {
ioe.printStackTrace(System.out);
} finally {
outs.flush();
outs.close();
in.close();
}
%>
</body>
</html>
构面页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:my="http://example.com/jsf"
>
<h:form>
<table width="100%" border="1">
<tr></tr>
<tr>
<td align="left" width="200px"><rich:tree id="fileTree" toggleType="ajax" var="item">
<rich:treeModelRecursiveAdaptor
roots="#{fileSystemBean.sourceRoots}" nodes="#{item.directories}">
<rich:treeNode>
#{item.shortPath}
</rich:treeNode>
<rich:treeModelAdaptor nodes="#{item.files}">
<rich:treeNode>
<a4j:commandLink value="#{item}"
action="#{TnwrdAction.downloadFile}" oncomplete="openFile();" render="fileTree"
immediate="true">
<f:setPropertyActionListener value="#{item}"
target="#{TnwrdBean.fileName}" />
</a4j:commandLink>
</rich:treeNode>
</rich:treeModelAdaptor>
</rich:treeModelRecursiveAdaptor>
</rich:tree></td>
<td >
<ui:insert name="Barrage" >
<my:include page="/WEB-INF/jsp/page.jsp" />
</ui:insert>
</td>
</tr>
</table>
</h:form>
</ui:composition>
在此构造中至少存在两个主要错误。
首先,您不能使用使用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}
是不必要的。
磁盘调度 磁盘访问延迟 = 队列时间 + 控制器时间 + 寻道时间 + 旋转时间 + 传输时间 磁盘调度的目的是减小延迟,其中前两项可以忽略,寻道时间是主要矛盾。 磁盘调度算法 FCFS:先进先出的调度策略,这个策略具有公平的优点,因为每个请求都会得到处理,并且是按照接收到的顺序进行处理。 SSTF(Shortest-seek-time First 最短寻道时间优先):选择使磁头从当前位置开始移动
问题内容: 一个非常基本的问题。通过提供文件的完全限定路径,尝试打开文件描述符时执行的步骤的确切顺序是什么? 我在寻找 在Linux上如何运作 给定文件名-如何将其转换为inode和磁盘扇区 linux文件系统(特别是ext3和ext4)是否维护某种文件名到inode的映射? 问题答案: 文件确实是inode。 通常,给定文件在某个目录中有一些条目指向其索引节点。目录将名称映射到索引节点,目录是一
我已经在Ubuntu 14.04上安装了hadoop。每当我将文件从本地文件系统复制到HDFS时,我都会出现以下错误。 我使用这个命令: 我遇到的错误是: 我是Linux环境的新手。我不明白哪个文件不存在。
问题内容: 我不想在Maven存储库(本地/远程)中安装几个jar。特别是我有一些jar文件位于 使用NetBeans打开/编辑时如何将它们包括到我的项目中? 问题答案: 您是否考虑过将这两个JAR添加为依赖项?例如, 请注意,不建议这样做,如果有的话,应该非常谨慎地使用它。
我使用这段代码,它完美地创建了zip文件,例如我有一个文件夹 SD卡/音乐,当我创建xxx时。它创建的zip文件。zip文件包括音乐/歌曲以及其中的一些子文件夹 但我想排除“音乐”中的主文件夹。压缩文件,并希望它直接开始,包括所有的歌曲和它的子文件夹,如何做到这一点 我使用这种方式,但在压缩时也使用主文件夹名称 有人帮忙吗谢谢 到目前为止,这一直很棘手,对我来说,现在没有办法工作:/
本文向大家介绍WordPress 包括外部css文件,包括了WordPress 包括外部css文件的使用技巧和注意事项,需要的朋友参考一下 示例 在此示例中,我们要包括字体真棒图标字体
我需要从本地文件系统复制一个文件夹到HDFS。我找不到任何例子移动文件夹(包括它的所有子文件夹)到HDFS
问题内容: 我正在使用LiteIDE for Go。我的Go文件位于此处: 当我使用以下文件添加文件时: 导入“ ../Helper” 我收到此错误: 无法加载软件包:/Users/username/go/src/src/projectA/main.go:4:8:非本地软件包中的本地导入“ ../Helper” 有什么想法我做错了吗? 问题答案: 您通过导入路径导入软件包。对于位于中的packag