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

时间:2011-01-24 16:32:40

标签: javascript ajax richfaces ajax4jsf

在网络应用程序中使用A4J,Richfaces,当用户点击<a4j:commandButton>时,我需要打开一个新的浏览器窗口。

我想我必须使用window.open(URL, ...)。我应该把它放在哪里?

我的<a4j:commandButton>看起来像这样:

<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 个答案:

答案 0 :(得分: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/><iframe/>内打开.pdf报告。

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

答案 1 :(得分:2)

正如我从您的命令按钮中看到的,您想要求确认,执行操作并打开一个新窗口吗?我不完全确定按钮是否可以处理如此多的操作,但您可以始终尝试使用onload配置并为要加载的页面分配操作,并允许commanbutton同时处理打开窗口的确认和操作Renan建议。