是否可以在离开JSF页面后调用方法?
Not when using native JSF or PrimeFaces. Your best bet would be to hook on session expiration instead.
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
@Named
@SessionScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
If you happen to use the JSF utility library OmniFaces , then you can use its @ViewScoped
. This will call the @PreDestroy
when leaving the page referencing the view scoped bean.
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 , it works by triggering a navigator.sendBeacon()
during the window beforeunload
event with a fallback to synchronous XHR (which is deprecated in modern browsers supporting navigator.sendBeacon()
).
If you use omnifaces @ViewScoped annotation in the backing bean the bean object is destroyed when you leave the view; so you can call a function when this happens using the @PreDestroy annotation in it.
Note : You must use omnifaces @ViewScoped annotation; with standard JSF @ViewScoped annotation the object isn't destroyed just by leaving the view, so pay attention to the import!
Your problem Solution :- it work with java script
<head>
<title>onunload test</title>
<script type="text/javascript">
window.onunload = unloadPage;
function unloadPage()
{
alert("unload event detected!");
}
</script>
</head>
Also Some link for more details:- Link
You can call a JSF managed bean method when you are closing the page or navigating to another page by using a <a4j:jsFunction/>
and calling it at ' onunload ' event of the page body as below.
<body onunload="leavingPage()">
<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.