有没有办法在离开JSF页面时调用方法?
不是在使用本机JSF或PrimeFaces时。你最好的选择是挂钩会话到期。
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
@Named
@SessionScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
如果您碰巧使用JSF实用程序库OmniFaces,那么您可以使用它的@ViewScoped
。这将在离开引用视图范围bean的页面时调用@PreDestroy
。
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
Under the covers,它的工作原理是在窗口navigator.sendBeacon()
事件期间触发beforeunload
并回退到同步XHR(在modern browsers supporting navigator.sendBeacon()
中弃用)。
如果在支持bean中使用omnifaces @ViewScoped注释,则在离开视图时会销毁bean对象;因此,当发生这种情况时,可以使用@PreDestroy注释来调用函数。
注意:您必须使用omnifaces @ViewScoped注释;使用标准的JSF @ViewScoped注释,只要离开视图就不会破坏对象,所以要注意导入!
您的问题解决方案: - 它使用JavaScript
<head>
<title>onunload test</title>
<script type="text/javascript">
window.onunload = unloadPage;
function unloadPage()
{
alert("unload event detected!");
}
</script>
</head>
还有一些链接了解更多细节: - Link
当您关闭页面或使用<a4j:jsFunction/>
导航到另一个页面并在页面主体的'onunload'事件中调用它时,可以调用JSF托管bean方法,如下所示。
<body onunload="leavingPage()">
<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>