我需要通过POST点击<h:commandButton>
在新窗口中打开JSF页面。我知道我可以使用JavaScript实现这一点。但我想使用JSF而不是JavaScript来实现这个目标。
我怎样才能做到这一点?我正在使用JSF 2.0。
答案 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页面。 单击后,页面将在新选项卡/页面中打开(触发操作事件)。 最后,触发onblur动作并将表单再次设置为其初始状态(其余按钮将在_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>