【问题标题】:Change form target to _blank with primefaces and oncomplete使用 primefaces 和 oncomplete 将表单目标更改为 _blank
【发布时间】:2013-02-22 00:00:19
【问题描述】:

这个话题已经出现在其他帖子中,但是提到的解决方案都没有对我有用,所以我在这里,希望有人能指出我正确的方向。

基本上,我有一个带有 Primefaces 3.5 的应用程序,带有 2 个命令按钮,它们执行支持 bean 方法以生成两个不同的报告作为输出流(没有可用的 GET)。此报告之一作为附件生成,而另一个应显示在另一个选项卡中。两者形式相同。

我的问题来自在单独的选项卡中生成的报告:由于报告共享相同的表单,我不能在表单定义中使用 target=blank 并且由于我必须在我的支持 bean 中进行验证,我必须显示可能的错误主标签中的消息,只有在一切顺利时才打开新的。

我在表单页面中尝试了以下js:

function test() {
    document.getElementById("formRep3_1").target = '_blank';
}

由 bean 调用

RequestContext.getCurrentInstance().execute("test()");

验证成功后。但它不起作用。

我还尝试在报告按钮上设置一个 oncomplete="test()",稍微修改一下 js,如下所示:

function test() {
    var v = '<h:outputText value="#{repReqStatus.resultCheck}" />';
    if (v.value == "success") {
        document.getElementById("formRep3_1").target = '_blank';
    }
    else {
        alert('no');
    }
    }

但似乎 oncomplete 根本没有被调用!即使我再做一次检查也不会

oncomplete="if (!args.validationFailed){test()}"

是的,我迷路了。非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 您能修正一下您的代码格式吗?
  • 这是 AJAX 请求吗?如果这是 AJAX 请求,您将无法使用 _blank 打开新窗口/选项卡。您必须在onsuccess 中手动打开新窗口。
  • 我也尝试在我的 commandButton 中使用 onsuccess,这样我就可以打开一个新选项卡...但是如果验证失败,新选项卡仍然会打开并且错误消息会显示在第一页。在这种情况下,我是否必须在代码中设置一些内容才能不触发 onSuccess?谢谢!

标签: javascript forms jsf primefaces


【解决方案1】:

在调用链接的动作时,您不能更改链接的目标。为时已晚。

最好的办法是将target="_blank" 排除在外,而是在所需的URL 上调用JavaScript window.open()。您可以将 PDF 报告存储在会话中,或者为 URL 准备请求参数,以便它可以根据这些请求参数生成所需的 PDF 报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多