13

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

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

4

2 回答 2

33

唯一的非 JS 方式是target="_blank"在 parent中设置<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>
于 2012-07-24T13:08:32.303 回答
5

当您将目标限制为单个操作时,您可能希望表单处于初始状态。通过 oncklick 操作,您可以将表单的目标设置为 _blan 页面。点击后,页面在新标签页/页面中打开(触发动作事件)。最后,触发 onblur 动作并将表单再次设置为初始状态(其余按钮将在 _self 页面中打开) 使用此代码,您可以限制为仅 ah:commandbutton 在新页面中打开。其余按钮将在 self 页面中打开:

    <h:commandButton
       onclick="this.form.target='_blank'"
       onblur="this.form.target='_self'"
       id="listadoRebuts"
       action="#{giaquaBusquedaCorte.abrirListadoRebuts}"
       value="#{msg.seqVisorbtnRecibos}">
    </h:commandButton>
于 2013-03-27T09:52:24.060 回答