JSF:我能从bean关闭浏览器选项卡吗?

6
我的应用程序是一款管理软件,为了方便用户,我希望他们可以打开多个选项卡以更改多条记录的参数。但是,在完成操作后,这些选项卡仍然保持打开状态,我收到了一些投诉。所以,我的问题基本上是:
是否有一种方法可以关闭发送请求给我的后端组件的浏览器选项卡?例如:
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个回答

3

我在混合js和jsf方面很蠢 - 你能发布一段更新我的按钮代码的代码吗?我尝试了<f:ajax execute="@this" render="window.close();"/>但没有成功。 - Lukas Novicky

2

Using an OutputLink and 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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接