我需要在页面加载时调用一个方法来支持bean.我用它实现了它
<f:event listener="#{managedBean.onLoad}" type="preRenderView">
Run Code Online (Sandbox Code Playgroud)
但是无论何时在页面中发出ajax请求,都会再次调用该方法.在我的要求中我不需要它.如何避免在ajax请求中调用该方法?
Bal*_*usC 30
preRenderView在呈现视图之前,仅在每个请求上调用该事件.ajax请求也是呈现视图的请求.所以行为是完全可以预期的.
你基本上有两个选择:
@PostConstruct在@ViewScopedbean 上用方法替换它.
@ManagedBean
@ViewScoped
public class ManagedBean {
@PostConstruct
public void onLoad() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
然后仅在第一次构造bean时调用它.只要您在回发中使用相同的视图,ajax或非回显,视图范围的bean实例就会存在.
如果当前请求是ajax请求,则在侦听器方法内执行检查.
@ManagedBean
// Any scope.
public class ManagedBean {
public void onLoad() {
if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) {
return; // Skip ajax requests.
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您真的对跳过回发而不是特别是ajax请求感兴趣,那么请执行以下操作:
if (FacesContext.getCurrentInstance().isPostback()) {
return; // Skip postback requests.
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
7587 次 |
| 最近记录: |