使用h:commandButton通过POST打开新窗口

时间:2012-07-23 11:06:22

标签: jsf http-post commandbutton new-window

我需要通过POST点击<h:commandButton>在新窗口中打开JSF页面。我知道我可以使用JavaScript实现这一点。但我想使用JSF而不是JavaScript来实现这个目标。

我怎样才能做到这一点?我正在使用JSF 2.0。

2 个答案:

答案 0 :(得分:30)

唯一的非JS方式是在父target="_blank"中设置<h:form>

<h:form target="_blank">
    ...
    <h:commandButton value="Open in new Window" />
</h:form>

然而,这会影响所有非ajax(!)操作,这些操作以完全相同的形式执行。因此,如果你很聪明,那就不要在新窗口中打开ajax动作。但是,ajax也是JavaScript,你提到你不想使用JS(我希望你一旦发现PrimeFaces实际上充满了JavaScript就不会感到震惊)。

如果您绝对需要将其限制为单个操作,那么您真的无法对JavaScript提出任何帮助。

<h:form>
    ...
    <h:commandButton value="Open in new Window" onclick="this.form.target='_blank'" />
</h:form>

答案 1 :(得分:3)

当您将目标仅限制为单个操作时,可能您希望将表单置于其初始状态。 使用oncklick操作,您可以将表单的目标设置为_blan页面。 单击后,页面将在新选项卡/页面中打开(触发操作事件)。 最后,触发onb​​lur动作并将表单再次设置为其初始状态(其余按钮将在_self页面中打开) 使用此代码,您可以限制为仅在h:commandbutton中打开新页面。 其余按钮将在自己的页面中打开:

    <h:commandButton
       onclick="this.form.target='_blank'"
       onblur="this.form.target='_self'"
       id="listadoRebuts"
       action="#{giaquaBusquedaCorte.abrirListadoRebuts}"
       value="#{msg.seqVisorbtnRecibos}">
    </h:commandButton>