2014-04-08 31 views
4

我的应用程序是管理软件,为了方便用户,我希望允许他们打开多个选项卡,以便一次更改多个记录的参数。但是,在完成他们所做的任何事情之后,选项卡会保持打开状态,并且我对此有所抱怨。所以基本上我的问题是:jsf我可以关闭来自bean的浏览器选项卡吗?

如果有什么办法关闭浏览器选项卡,向我的支持bean中的方法发送请求?例如:

JSF页面:

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

Bean方法:

public void publicSelected() { 
    application.setAssignmentStatus(done); 
    dataAccess.mergeEntity(application); 
} 

有没有办法合并命令和激活的方法关闭浏览器选项卡后,添加的东西?感谢您的帮助

完整代码解决方案我感觉不好用混合JS和JSF,所以任何的你,也坏在此我用蒂亚戈维埃拉多斯桑托斯提示发布完整的代码的解决方案。

现在我的按钮的代码如下所示:在页面底部

<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

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

查看更多在此How to close current tab in a browser window?

+0

我很愚蠢当它混合js和jsf - 你可以发布代码更新我的代码按钮?我试过但没有运气 –

+1

明白了:)谢谢:) ps - 我讨厌js:[ –

+0

答案是什么,怎么回事你解决了 –

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 
} 
相关问题