在a4j:commandButton中打开一个新窗口

6

在一个Web应用程序中使用A4J、Richfaces技术,当用户单击时,我需要打开一个新的浏览器窗口。

我认为我将不得不使用window.open(URL, ...)。我应该把它放在哪里?

我的看起来像这样:

<a4j:commandButton id="elementDetailsButton"
    onclick="if (!confirm('Are you sure? Unsaved data will be lost')) { return false; }"
    action="#{myBean.elementDetailsAction}"
    value="Element Details">
    <a4j:actionparam name="elementDetailsString"
        value="getElementDetails()"
        assignTo="#{myBean.elementDetails}" noEscape="true">
    </a4j:actionparam>
</a4j:commandButton>
2个回答

5
您可以确认window.open而不是return false
<a4j:commandButton id="elementDetailsButton"
    onclick="if (confirm('Are you sure? Unsaved data will be lost')) { window.open(URL, ...) } else { return false }" (...) />

“Else”是可选的,可能不是必需的。
或者你可以改变表单目标。。。我记不太清楚是否是正确的语法...
<a4j:commandButton id="elementDetailsButton" onclick="this.form.taget='_blank'" (...) />

更改表单目标会带来一个很好的问题。您应用程序的其余部分将定位到新窗口。为了解决这个问题,我使用了一个 <h:commandLink/> 来关闭窗口(modalPanel)并重置表单目标。

我曾经使用这个(目标技巧)在 <rich:modalPanel/> 内打开 .pdf 报告,使用 <iframe/>

但是我不确定更改表单目标对您的问题是否有用。


2

从您的命令按钮可以看出,您想要请求确认、执行动作并打开新窗口,对吗?我不确定一个按钮是否能够处理这么多的操作,但您可以尝试使用 onload 配置为您想要加载的页面分配一个动作,并允许 commandbutton 处理确认和打开窗口的动作,就像 Renan 建议的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接