Есть ли способ вызвать метод при выходе из страницы с JSF или PrimeFaces? - PullRequest
9 голосов
/ 03 апреля 2012

Есть ли способ вызвать метод при выходе из страницы с JSF?

Ответы [ 4 ]

5 голосов
/ 03 апреля 2012

Не при использовании нативных 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()).

См. также:

2 голосов
/ 22 декабря 2017

Если вы используете аннотацию omnifaces @ViewScoped в базовом компоненте, объект компонента уничтожается при выходе из представления;поэтому вы можете вызывать функцию, когда это происходит, используя аннотацию @PreDestroy.

Примечание : вы должны использовать аннотацию omnifaces @ViewScoped;со стандартной аннотацией JSF @ViewScoped объект не уничтожается только при выходе из вида, поэтому обратите внимание на импорт!

Источник: http://showcase.omnifaces.org/cdi/ViewScoped

1 голос
/ 04 апреля 2012

Ваша проблема Решение: - это работает с Java-скриптом

    <head>
<title>onunload test</title>
<script type="text/javascript">
window.onunload = unloadPage;

function unloadPage()
{
 alert("unload event detected!");
}
</script>
</head>

Также некоторые ссылки для более подробной информации: - Ссылка

0 голосов
/ 03 апреля 2012

Вы можете вызвать метод управляемого компонента JSF, когда закрываете страницу или переходите на другую страницу, используя <a4j:jsFunction/> и вызывая его при событии ' onunload 'Тело страницы, как показано ниже.

<body onunload="leavingPage()">

<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>
...