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

问题描述 投票:9回答:4

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

jsf primefaces managed-bean window.onunload
4个回答
5
投票

不是在使用本机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:


2
投票

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

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

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


1
投票

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

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

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

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


0
投票

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

<body onunload="leavingPage()">

<a4j:jsFunction name="leavingPage" action="#{myBean.myMethod}"/>
© www.soinside.com 2019 - 2024. All rights reserved.