jsf我可以从bean关闭浏览器选项卡吗?

时间:2014-04-08 13:38:15

标签: java jsf

我的应用程序是管理软件,为了方便用户,我想让他们打开多个标签,一次更改多个记录的参数。但在完成他们正在做的任何事情之后,标签保持打开状态,我得到了一些抱怨。基本上我的问题是:

如果有任何方法可以关闭向我的支持bean中的方法发送请求的浏览器选项卡?例如:

JSF页面:

<h:commandButton value="Public score"
   action="#{assignmentBean.publicSelected()}">                        
</h:commandButton>

Bean方法:

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>

现在在方法完成必须完成的操作后窗口关闭。

2 个答案:

答案 0 :(得分:2)

我认为你可以使用javascript命令Window.close()然后你可以把它放在oncomplete标签上或使用FacesContext调用你的托管bean。

在此How to close current tab in a browser window?

中查看更多内容

答案 1 :(得分:1)

使用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
}