在渲染视图之前,只要在每个请求上调用preRenderView事件. ajax请求也是呈现视图的请求.所以行为是完全预期的.
原文链接:https://www.f2er.com/ajax/160097.html你基本上有两个选择:
>在@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. }