gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 01:17:07 24 4
gpt4 key购买 nike

我需要在页面加载时调用支持 bean 中的方法。我使用

实现了它
<f:event listener="#{managedBean.onLoad}" type="preRenderView">

但是每当页面中发出 ajax 请求时,该方法就会再次被调用。我的要求中不需要它。如何避免在ajax请求中调用该方法?

最佳答案

在渲染 View 之前,每次请求都会调用 preRenderView 事件。 ajax 请求也是呈现 View 的请求。所以这种行为是完全可以预料到的。

你基本上有两个选择:

  1. 将其替换为 @ViewScoped bean 上的 @PostConstruct 方法。

    @ManagedBean
    @ViewScoped
    public class ManagedBean {

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

    }

    只有在第一次构造 bean 时才会调用此方法。只要您通过回发(无论是否使用 ajax)与同一 View 进行交互, View 作用域 bean 实例就会存在。


  2. 在监听器方法内执行检查当前请求是否为 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.
    }

关于jsf-2 - 如何避免ajax请求中调用preRenderView方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14687910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com