我的应用程序正在管理软件,为了方便用户,我想允许他们打开多个选项卡,以便一次更改多个记录的参数。但是在完成他们所做的任何事情后,标签仍然打开,我对此有一些抱怨。所以基本上我的问题是:
如果有办法关闭浏览器选项卡,在我的后备 Bean 中发送请求到方法?例如:
JSF 页面:
<h:commandButton value="Public score"
action="#{assignmentBean.publicSelected()}">
</h:commandButton>
豆法:
public void publicSelected() {
application.setAssignmentStatus(done);
dataAccess.mergeEntity(application);
}
有没有办法在合并命令并关闭激活方法的浏览器选项卡后添加一些东西?感谢您的帮助
解决方案的完整代码 我不擅长混合 JS 和 JSF,所以对于任何在这方面也很糟糕的人,我使用 Tiago Vieira Dos Santos 提示发布完整的代码解决方案。
现在我的按钮代码如下所示:
<h:commandButton value="Public score"
action="#{myBean.doThings}">
<f:ajax execute="@this" onevent="pop"/>
</h:commandButton>
加上在页面底部,我添加了如下代码:
<script type="text/javascript">
function pop(data){
if(data.status == "success"){
window.close();
}
}
</script>
现在,在方法执行必须执行的操作后,窗口将关闭。
我认为你可以使用javascript命令Window.close(),然后你可以把它放在oncomplete标签上,或者使用FacesContext调用你管理的bean。
在此查看更多信息 如何在浏览器窗口中关闭当前选项卡?
使用 OutputLink 和 Javascript
<h:outputLink onclick="window.open('popup.faces', 'popupWindowName', 'dependent=yes, menubar=no, toolbar=no'); return false;" value="#">
<h:outputText value="open popup" />
</h:outputLink>
通过此解决方案,我们可以控制新浏览器窗口的外观。由于没有回发,因此根本没有验证。这是在不需要更新模型且无需执行任何操作时打开新浏览器窗口的最简单方法。
为了实现正确的操作处理,我们需要决定是否向操作侦听器打开一个新窗口。
<h:commandLink actionListener="#{bean.openPopupClicked}" value="open popup" />
public void openPopupClicked(ActionEvent event) {
// code to open a new browser window goes here
}