Есть ли способ вызвать метод при выходе из страницы с JSF или PrimeFaces?
Есть ли способ вызвать метод при выходе из страницы с JSF?
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.
Примечание. Вы должны использовать аннотацию omnifaces @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}"/>