Есть ли способ вызвать метод при выходе со страницы с JSF?
Есть ли способ вызвать метод при выходе со страницы с JSF или PrimeFaces?
Ответы (4)
Не при использовании собственного 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
. Это вызовет @PreDestroy
при выходе со страницы, ссылающейся на bean-компонент с областью видимости.
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class Bean implements Serializable {
@PreDestroy
public void destroy() {
// Your code here.
}
}
Под прикрытием он работает, запуская navigator.sendBeacon()
во время события окна beforeunload
с откатом к синхронному XHR (который устарел в современных браузерах, поддерживающих navigator.sendBeacon()
).
Смотрите также:
Если вы используете аннотацию omnifaces @ViewScoped во вспомогательном компоненте, объект компонента уничтожается, когда вы покидаете представление; поэтому вы можете вызвать функцию, когда это произойдет, используя в ней аннотацию @PreDestroy.
Примечание. Вы должны использовать омнифейсную аннотацию @ViewScoped; со стандартной аннотацией JSF @ViewScoped объект не уничтожается просто при выходе из представления, поэтому обратите внимание на импорт!
Решение вашей проблемы: работает с java-скриптом
<head>
<title>onunload test</title>
<script type="text/javascript">
window.onunload = unloadPage;
function unloadPage()
{
alert("unload event detected!");
}
</script>
</head>
Также некоторая ссылка для более подробной информации: - Ссылка
Вы можете вызвать метод управляемого компонента JSF, когда вы закрываете страницу или переходите на другую страницу, используя <a4j:jsFunction/>
и вызывая его в событии 'onunload' тела страницы как ниже.
<body onunload="leavingPage()">
<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>