我正在使用 jquery waypoints 和 jsf 以下链接实现无限滚动。我对需要无限滚动的 xhtml 之一进行了预渲染。现在,由于航点发送 ajax 请求,所以为什么每次滚动都调用 prerender,这意味着整个页面都在刷新。请让我知道如何解决这个问题。
问问题
5406 次
1 回答
13
您似乎认为该preRenderView
事件仅在视图构建期间调用一次,而不是在同一视图的后续请求中调用。这是不真实的。preRenderView
在渲染视图之前调用该事件。每次请求都会呈现视图。这还包括 ajax 请求(它应该如何为 ajax 请求生成必要的 HTML 输出?)。因此,您所看到的行为是完全可以预料的。您只是使用了错误的工具来完成这项工作。
你应该要么使用bean的@PostConstruct
方法,@ViewScoped
@ManagedBean
@ViewScoped
public class Bean {
@PostConstruct
public void init() {
// Do here your thing during construction of the view.
}
// ...
}
FacesContext#isPostback()
或在预渲染视图事件侦听器中添加否定检查
public void preRender() {
if (!FacesContext.getCurrentInstance().isPostback()) {
// Do here your thing which should run on initial (GET) request only.
}
}
也可以看看:
于 2013-11-14T11:15:10.927 回答