有没有办法在离开带有JSF或PrimeFaces的页面时调用方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在离开带有JSF或PrimeFaces的页面时调用方法?相关的知识,希望对你有一定的参考价值。

有没有办法在离开JSF页面时调用方法?

答案

不是在使用本机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。这将在离开引用视图范围bean的页面时调用@PreDestroy

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,它的工作原理是在窗口navigator.sendBeacon()事件期间触发beforeunload并回退到同步XHR(在modern browsers supporting navigator.sendBeacon()中弃用)。

See also:

另一答案

如果在支持bean中使用omnifaces @ViewScoped注释,则在离开视图时会销毁bean对象;因此,当发生这种情况时,可以使用@PreDestroy注释来调用函数。

注意:您必须使用omnifaces @ViewScoped注释;使用标准的JSF @ViewScoped注释,只要离开视图就不会破坏对象,所以要注意导入!

资料来源:http://showcase.omnifaces.org/cdi/ViewScoped

另一答案

您的问题解决方案: - 它使用javascript

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

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

还有一些链接了解更多细节: - Link

另一答案

当您关闭页面或使用<a4j:jsFunction/>导航到另一个页面并在页面主体的'onunload'事件中调用它时,可以调用JSF托管bean方法,如下所示。

<body onunload="leavingPage()">

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

以上是关于有没有办法在离开带有JSF或PrimeFaces的页面时调用方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Primefaces+JSF2 中显示用户点击的 url

JSF Primefaces TabView 问题

JSF Primefaces 在布局问题中使用菜单栏

没有@ViewScoped的JSF

带有 JSF 项目的组件库

JSF PrimeFaces overlayPanel 提交值