当用户点击时如何打开新选项卡p:commandButton
?我还想使用 FlashScope 将一些参数传递到新页面。这是代码:
<h:form>
<p:commandButton value="open new tab" action="#{myBean.newTab}"/>
</h:form>
public String newTab() {
Faces.setFlashAttribute("foo", bar);
return "otherView";
}
在我使用的 otherView 页面上f:event type="preRenderView"
读取Flash参数。
两个注意事项:
- 我需要使用 FlashScope,而不是 URL 参数。
- 如果可以的话我不想改变
newTab()
and preRenderView()
方法。
感谢帮助
Use target="_blank"
在表单上告诉浏览器表单的同步响应应该显示在新的(空白)选项卡/窗口中。你只需要关闭ajax行为<p:commandButton>
为了使其成为同步请求。
<h:form target="_blank">
<p:commandButton value="open new tab" action="#{myBean.newTab}" ajax="false" />
</h:form>
无需对烘焙豆进行任何更改,它就会按照您的预期工作。我只建议在操作方法中使用 POST-Redirect-GET 模式。
return "otherView?faces-redirect=true";
否则,新选项卡将显示原始页面的 URL,并且 F5 将重新调用 POST。此外,通过这种方式,闪存作用域也真正按照其设计目的使用(如果您没有重定向,只需存储在请求作用域中就足够了)。
Update:根据评论,初始选项卡/窗口中的视图作用域 bean 会以这种方式被杀死。通过返回一个String
导航案例结果。是的,如果您想让视图作用域 bean 保持活动状态,请将导航案例替换为Faces#redirect()调用(假设确实是OmniFaces你在那里用的Faces#setFlashAttribute()
)。你只需要设置Flash#setRedirect()
to true
事先指示闪存范围将发生重定向。
public void newTab() throws IOException {
Faces.setFlashAttribute("foo", bar);
Faces.getFlash().setRedirect(true);
Faces.redirect("otherView.xhtml");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)