Bal*_*usC 6

不是在使用本机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.
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您碰巧使用了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.
    }
}
Run Code Online (Sandbox Code Playgroud)

在幕后,它通过navigator.sendBeacon()在窗口beforeunload事件期间触发a 回退到同步XHR(在支持的现代浏览器中navigator.sendBeacon()不推荐使用)来工作.

也可以看看: