加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsf-2 – 如何在ajax请求中避免preRenderView方法调用?

发布时间:2020-12-16 03:06:27 所属栏目:百科 来源:网络整理
导读:我需要在页面加载时调用支持bean的方法.我实现了它使用 f:event listener="#{managedBean.onLoad}" type="preRenderView" 但是,只要在页面中进行ajax请求,该方法将再次被调用.我不需要我的要求.如何避免该方法调用ajax请求? 在渲染视图之前,只要在每个请求
我需要在页面加载时调用支持bean的方法.我实现了它使用
<f:event listener="#{managedBean.onLoad}" type="preRenderView">

但是,只要在页面中进行ajax请求,该方法将再次被调用.我不需要我的要求.如何避免该方法调用ajax请求?

在渲染视图之前,只要在每个请求上调用preRenderView事件. ajax请求也是呈现视图的请求.所以行为是完全预期的.

你基本上有两个选择:

>在@ViewScoped bean上用@PostConstruct方法替换它.

@ManagedBean
@ViewScoped
public class ManagedBean {

    @PostConstruct
    public void onLoad() {
        // ...
    }

}

这是在第一次构建bean时调用的.视图范围的bean实例只要在与postbacks(ajax)不同的交互中与同一视图进行交互即可.

>如果当前请求是ajax请求,请在侦听器方法内执行检查.

@ManagedBean
// Any scope.
public class ManagedBean {

    public void onLoad() {
        if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { 
            return; // Skip ajax requests.
        }

        // ...
    }

}

或者,如果您真的有兴趣跳过回发,而不是专门的ajax请求,请改为:

if (FacesContext.getCurrentInstance().isPostback()) { 
            return; // Skip postback requests.
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读