首页 > 解决方案 > 如何通过 servlet 在新窗口/选项卡中打开响应?

问题描述

我曾经在我的 HTML 页面中有两个表单,每个表单里面都有一个提交它的按钮。第二个看起来像这样并生成一个 PDF:

<form action="/MyProject/print" method="post" name="printForm"
    onsubmit="return validateForm()" target="_blank">
    <input type="submit" id="pdf_button" class="button"
        name="print" value="${buttonPrint}"> 
</form>

对于页面流,我需要将两个按钮放在一个表单中并在 servlet 中处理它。我想知道如何在新窗口中实现 PDF 服务?

我使用以下确实有效,但在同一窗口中转发到 PDF。我怎么能把目标设定为_blank

    request.getRequestDispatcher("/print").forward(request, response);

标签: javaservlets

解决方案


如果有人遇到同样的问题,这就是我的解决方法:

我通过 JavaScript 向表单添加了一个 onsubmit 事件,该事件捕获按下的提交按钮并更改目标和操作(如果它是 pdf 按钮)。

$("form").submit(
                function() {
                    var val = $("input[type=submit][clicked=true]").attr(
                            'id');
                    if (val == 'pdf_button') {
                        $("#myForm").attr('target', '_blank');
                        $("#myForm").attr(
                                'action',
                                /Path/To/Print/Servlet
                    }
                });
        $("form input[type=submit]").click(
                function() {
                    $("input[type=submit]", $(this).parents("form"))
                            .removeAttr("clicked");
                    $(this).attr("clicked", "true");
                });

推荐阅读