此方法发回一个pdf文件。问题是,当我打开一个带有_blank的新选项卡时,URL以.xhtml结尾。甚至文件名也显示在我的示例“list.xhtml”(URL的最后一部分)中。问题是我不能下载这个文件,因为它不是一个pdf文件。
这是我的xhtml文件:
<h:form id="form">
<p:commandButton id="envoiRetour" onclick="this.form.target = '_blank';"
actionListener="#{returnCtrl.announceReturn()}"
value="Open PDF in new tab"
ajax="false" />
</h:form>
这是returnctrl.annoncereturn()方法:
public void announceReturn() throws MalformedURLException, FileNotFoundException, DocumentException, BadElementException, IOException, InterruptedException {
String referenceAnnouncement = "C:/Users/path_to_my_pdf_file.pdf";
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(referenceAnnouncement), 10240);
response.reset();
response.setHeader("Content-type", "application/pdf");
response.setContentLength((int)new File(referenceAnnouncement).length());
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Content-disposition", "inline; filename=" + "file.pdf");
response.setHeader("pragma", "public");
output = new BufferedOutputStream(response.getOutputStream(), 10240);
byte[] buffer = new byte[10240];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
output.flush();
} finally {
output.close();
input.close();
}
}
编辑3:正如这里提到的->在新选项卡打开PDF,保存文件给出了错误的文件名,如果处理不是“附件”,文件名似乎被忽略...所以我想我需要考虑另一种方法来做这件事。
谢谢你抽出时间。
尝试“附件”而不是“内联”来强制浏览器保存文件(而不是尝试用相关的插件打开-如果安装了)
response.setHeader("Content-disposition", "attachment; filename=" + "file.pdf");
希望能有所帮助。
贝佩
问题内容: 这是一个非常基本的请求-响应测试。浏览器使用jQuery $ .ajax API将“来自浏览器的hello”发送到servlet,然后servlet接收此消息,然后使用org.json.simple库创建一个JSON对象,并将带有消息“ hello from server”的JSON响应发送回浏览器。 我在本地主机上运行它,只是假设我的IP地址是123.123.12.123,平台是Ub
我不明白为什么这这么难,每个人都有自己的实现... 所以在我的服务器中,我生成了一个文件,我希望用户能够在点击后下载。 所以我设置了请求,服务器成功地接收到了请求,现在,我正在努力将字节数组写入输出。 这是我的回应代码:
我正在等待(从USSD请求中)检索一个值,以便返回它(getUSSD):
以下是图片: 我有一个带有表单的html/jsp页面。 当用户按下提交按钮时,我想将表单中包含的信息发送到servlet,然后servlet将进行一些处理并返回字符串。 然后将该字符串发送到另一个servlet,该servlet将保存一个文件。 我已经将servlet保存到文件中: 我有两个问题: > 如何将值从servlet返回到调用它的HTML页面,并从那里访问它们?
如您所见,它将参数和的和保存在变量中,然后将包含它们的和的eax寄存器保存在变量中,就像函数返回值一样。 这样做是因为函数是用返回值定义的吗?
本文向大家介绍请说明重载和重写的区别,相同参数不同返回值能重载吗?相关面试题,主要包含被问及请说明重载和重写的区别,相同参数不同返回值能重载吗?时的应答技巧和注意事项,需要的朋友参考一下 考察点:重载 重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。 重载Overloading是一个类中多态性的一种表现。