在新标签页/窗口中打开/下载文件时刷新/浏览当前页面

意识形态

我有一个按钮,它会打开一个带有生成的pdf文件的新标签页。但是,单击按钮后,我想导航到另一个页面。

这意味着,单击按钮后,我想用pdf打开一个新标签,然后导航到初始标签上的另一页。我正在使用primefacesp:commandButton并尝试过,onclick="window.location.href='www.google.de'"但是它不起作用。但是onclick="window.lalert('www.google.de')"确实有效。

这是我的代码:

<h:form id="transForm" target="_blank">
<p:commandButton  value="Zertifikat erstellen" ajax="false" 
                                label="Speichert die Anmeldung und erstellt ein Zertifikat im PDF-Format"
                                action="#{transportErfassen.generatePDFZertifikat()}"/>

</h:form>

generatePDFZertifikat() 确实使用以下代码创建了pdf文件,我认为这是问题所在:

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();

    externalContext.setResponseContentType("application/pdf" );
    externalContext.setResponseHeader("Expires", "0");
    externalContext.setResponseHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
    externalContext.setResponseHeader("Pragma", "public");
    externalContext.setResponseHeader("Content-disposition", "inline; filename=\"" + fileName +"\"");
    externalContext.setResponseContentLength(out.length);
    externalContext.addResponseCookie(Constants.DOWNLOAD_COOKIE, "true", new HashMap<String, Object>());

    //setze explizit auf OK
    externalContext.setResponseStatus(200);     

    OutputStream os = externalContext.getResponseOutputStream();
    os.write(out, 0, out.length);
    os.flush();

    facesContext.responseComplete();       
    facesContext.renderResponse();       
BalusC

您基本上是在尝试将2个响应发送回1个请求。这永远不会在HTTP中起作用。如果您想发回2个响应,则必须让客户端以某种方式触发2个请求。您已经在为解决方案寻找正确的方向,而在JavaScript的帮助下,有可能在单个事件(点击)上触发多个请求。onclick但是您的尝试是无效的,在window.location提交表单之前,单击提交按钮的单击更改完全中止了按钮的原始操作,即提交了表单。

最好的选择是直接导航到结果页面,该页面依次window.open()在页面加载时调用JavaScript ,指向您要打开的PDF文件的URL。也就是说,无法将一些HTML / JS代码与PDF文件一起发送以指示导航(因为这显然会损坏PDF文件)。这也意味着,您不能将PDF直接返回到表单提交请求。必须重新设计代码,以便可以通过后续的GET请求检索PDF。最好的方法是使用一个简单的servlet。您可以将生成的PDF与唯一键临时存储在磁盘或会话中,并将该唯一键作为请求pathinfo或参数传递给window.open()URL中的servlet

这是一个启动示例:

初始形式:

<h:form>
    ...
    <p:commandButton ... action="#{bean.submit}" />
</h:form>

豆角,扁豆:

public String submit() {
    File file = File.createTempFile("zertifikat", ".pdf", "/path/to/pdfs");
    this.filename = file.getName();

    // Write content to it.

    return "targetview";
}

目标视图:

<h:outputScript rendered="#{not empty bean.filename}">
    window.open('#{request.contextPath}/pdfservlet/#{bean.filename}');
</h:outputScript>

PDF servlet(为简洁起见,省略了nullchecks等;假定使用Java 7 Files#copy()):

@WebServlet("/pdfservlet/*")
public class PdfServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        File file = new File("/path/to/pdfs", request.getPathInfo().substring(1));
        response.setHeader("Content-Type", "application/pdf");
        response.setHeader("Content-Length", String.valueOf(file.length()));
        response.setHeader("Content-Disposition", "inline; filename=\"zertifikat.pdf\"");
        Files.copy(file.toPath(), response.getOutputStream());
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在新标签页/窗口中打开页面,并将当前窗口定向到新网址

来自分类Dev

如何在新标签页/窗口中打开页面?

来自分类Dev

在新标签页/窗口中打开使用PhP输出的文件

来自分类Dev

发生某些事件后,在同一浏览器窗口中打开新标签页

来自分类Dev

在Xcode 11中,如何在新标签页或新窗口中快速打开文件?

来自分类Dev

如何使用CSS在新标签页/窗口中打开链接?

来自分类Dev

在Perl中的新标签页/窗口中打开生成的PDF

来自分类Dev

强制Chrome在特定窗口中打开新标签页

来自分类Dev

Javascript在新标签页而不是窗口中打开

来自分类Dev

Okular - 在新标签页或新窗口中打开链接

来自分类Dev

在Firefox / Chrome上打开新标签页或窗口时,如何获得新的浏览器会话?

来自分类Dev

Chrome在新标签页中将下载链接作为文件打开,而不是在Mac OS上下载文件

来自分类Dev

在新的浏览器标签/窗口中打开链接时,关闭模式对话框

来自分类Dev

在Internet Explorer中直接打开下载文件时出现文件名问题

来自分类Dev

禁止在Chrome窗口中使用新标签页(改为在其他窗口中打开新标签页)

来自分类Dev

使用 CodeceptJS 时如何打开新标签页或窗口

来自分类Dev

jQuery:刷新当前页面时加载新页面

来自分类Dev

新标签页和浏览器窗口中的CSRF令牌

来自分类Dev

Gnome终端和Zsh:将当前目录保留在新标签页/窗口中

来自分类Dev

如何在现有的隐身窗口中打开新标签页?

来自分类Dev

无法使用Chrome扩展程序弹出窗口中的按钮打开新标签页

来自分类Dev

如何强制重定向在新标签页而不是新窗口中打开

来自分类Dev

如何刷新当前页面

来自分类Dev

如何打开下载的文件?

来自分类Dev

如何打开下载的文件?

来自分类Dev

Python文件在浏览器窗口中打开,而不是下载提示

来自分类Dev

外部链接在Chrome的新浏览器窗口中以空白标签的形式打开

来自分类Dev

外部链接在Chrome的新浏览器窗口中以空白标签的形式打开

来自分类Dev

使用设备模式开发工具在新的浏览器窗口中打开页面

Related 相关文章

  1. 1

    在新标签页/窗口中打开页面,并将当前窗口定向到新网址

  2. 2

    如何在新标签页/窗口中打开页面?

  3. 3

    在新标签页/窗口中打开使用PhP输出的文件

  4. 4

    发生某些事件后,在同一浏览器窗口中打开新标签页

  5. 5

    在Xcode 11中,如何在新标签页或新窗口中快速打开文件?

  6. 6

    如何使用CSS在新标签页/窗口中打开链接?

  7. 7

    在Perl中的新标签页/窗口中打开生成的PDF

  8. 8

    强制Chrome在特定窗口中打开新标签页

  9. 9

    Javascript在新标签页而不是窗口中打开

  10. 10

    Okular - 在新标签页或新窗口中打开链接

  11. 11

    在Firefox / Chrome上打开新标签页或窗口时,如何获得新的浏览器会话?

  12. 12

    Chrome在新标签页中将下载链接作为文件打开,而不是在Mac OS上下载文件

  13. 13

    在新的浏览器标签/窗口中打开链接时,关闭模式对话框

  14. 14

    在Internet Explorer中直接打开下载文件时出现文件名问题

  15. 15

    禁止在Chrome窗口中使用新标签页(改为在其他窗口中打开新标签页)

  16. 16

    使用 CodeceptJS 时如何打开新标签页或窗口

  17. 17

    jQuery:刷新当前页面时加载新页面

  18. 18

    新标签页和浏览器窗口中的CSRF令牌

  19. 19

    Gnome终端和Zsh:将当前目录保留在新标签页/窗口中

  20. 20

    如何在现有的隐身窗口中打开新标签页?

  21. 21

    无法使用Chrome扩展程序弹出窗口中的按钮打开新标签页

  22. 22

    如何强制重定向在新标签页而不是新窗口中打开

  23. 23

    如何刷新当前页面

  24. 24

    如何打开下载的文件?

  25. 25

    如何打开下载的文件?

  26. 26

    Python文件在浏览器窗口中打开,而不是下载提示

  27. 27

    外部链接在Chrome的新浏览器窗口中以空白标签的形式打开

  28. 28

    外部链接在Chrome的新浏览器窗口中以空白标签的形式打开

  29. 29

    使用设备模式开发工具在新的浏览器窗口中打开页面

热门标签

归档