不幸的是,HTTP无法实现。每个请求只能发送回一个响应。您不能将包含PDF文件和ajax响应的响应合并为一个响应。由于这是HTTP限制,因此JSF不能为您做任何事情。另外,根本不可能使用Ajax下载文件,因为由于安全限制,Javascript不能强制浏览器弹出“
另存为” 对话框,也不能对本地磁盘文件系统进行任何访问。
一种解决方法是单击一次第二个请求返回的位置时,在一次单击按钮上激发 两个 HTTP请求,以使另一个请求
Content-Disposition:attachment的响应保持不变。您可以通过
onclick在命令按钮上添加一个来实现。
<h:commandButton onclick="window.location='/context/pdfservlet/filename.pdf'">
并创建一个大致类似于FileServlet示例的PDF
servlet
。如您所见,由此不可能调用JSF操作。您必须将PDF下载方法重构为可以完成方法
HttpServlet工作的类
doGet()。对于JSF托管Bean和Servlet之间的任何必要通信,您可以使用会话范围或通过请求路径或参数传递所需的信息(只是PDF文件标识符?)。



