2

有没有办法在 JSF 2.0 中处理页面卸载事件?每当用户离开特定页面时,我想执行一些数据重置?

4

1 回答 1

3

没有 100% 可靠的方式来通知服务器端该unload事件。根据浏览器的品牌/版本,要么服务器根本无法被 ajax ( XMLHttpRequest) 请求命中,要么如果 ajax 请求可以成功完成(因为 ajax 请求被突然中止),您将遇到竞争条件因为选项卡/窗口已关闭,因此您冒着服务器永远不会检索完整 ajax 请求的风险)。

您最好的选择是在服务器端挂钩销毁事件。例如,在@ViewScopedbean 的情况下,您只需要创建一个带有注释的方法@PreDestroy

@ManagedBean
@ViewScoped
public class Bean {

    @PreDestroy
    public void destroy() {
        // This method is called whenever the view scope has been destroyed.
        // That can happen when the user navigates away by a POST which is
        // invoked on this bean, or when the associated session has expired.
    }

}

或者,也许你根本不需要它。您只需要将数据存储为视图范围 bean 的属性,而不是会话范围 bean。滥用会话范围 bean 的开发人员经常有这种要求;)另请参阅如何选择正确的 bean 范围?

于 2012-04-22T20:53:38.707 回答