Есть ли способ вызвать метод при выходе из страницы с 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 объект не уничтожается только при выходе из вида, поэтому обратите внимание на импорт!

Источник: http://showcase.omnifaces.org/cdi/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}"/>
Другие вопросы по тегам