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

vr3*_*3c9 11 jsf http-post new-window commandbutton

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

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

Bal*_*usC 31

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

<h:form target="_blank">
    ...
    <h:commandButton value="Open in new Window" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

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

如果你绝对需要将它限制为一个动作,那么你真的不能四处寻求JavaScript的帮助.

<h:form>
    ...
    <h:commandButton value="Open in new Window" onclick="this.form.target='_blank'" />
</h:form>
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)