在JSF中有没有一种方法可以在离开页面时调用一个方法?
在JSF中有没有一种方法可以在离开页面时调用一个方法?
如果使用原生的JSF或PrimeFaces,则不能这样做。您最好的选择是在会话过期时进行挂钩。
import jakarta.inject.Named;
import jakarta.enterprise.context.SessionScoped;
@Named
@SessionScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
@ViewScoped
。这将在离开引用视图范围bean的页面时调用@PreDestroy
。import jakarta.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
底层实现是通过在窗口beforeunload
或pagehide
事件期间触发navigator.sendBeacon()
,并回退到同步XHR(在支持navigator.sendBeacon()
的现代浏览器中已弃用)。
注意:您必须使用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>
还有一些更多详细信息的链接: 链接
当你关闭页面或导航到另一个页面时,可以使用<a4j:jsFunction/>
并在页面主体的'onunload'事件中调用它来调用JSF托管bean方法,如下所示。
<body onunload="leavingPage()">
<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>