How to avoid preRenderView method call in ajax request?
我需要在页面加载时调用 backing bean 中的方法。我使用
实现了它
1 | <f:event listener="#{managedBean.onLoad}" type="preRenderView"> |
但是,每当在页面中发出 ajax 请求时,就会再次调用该方法。我的要求中不需要它。如何避免在 ajax 请求中调用该方法?
你基本上有两个选择:
用
1 2 3 4 5 6 7 8 9 10 | @ManagedBean @ViewScoped public class ManagedBean { @PostConstruct public void onLoad() { // ... } } |
只有在第一次构造 bean 时才会调用它。只要您在回发、ajax 与否之间与同一个视图交互,视图范围的 bean 实例就会存在。
如果当前请求是 ajax 请求,请在侦听器方法内部执行检查。
1 2 3 4 5 6 7 8 9 10 11 12 13 | @ManagedBean // Any scope. public class ManagedBean { public void onLoad() { if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { return; // Skip ajax requests. } // ... } } |
或者,如果您真的对跳过回发而不是专门的 ajax 请求感兴趣,那么请改为这样做:
1 2 3 | if (FacesContext.getCurrentInstance().isPostback()) { return; // Skip postback requests. } |