我正在使用jquery waypoints和link之后的jsf实现无限滚动。 我有一个xhtml的prerender,需要无限滚动。 现在,当waypoint发送ajax请求时,为什么每个滚动它调用prerender,这意味着整个页面都被重新刷新。 请让我知道如何解决这个问题。
答案 0 :(得分:12)
您似乎认为preRenderView
事件在构建视图期间仅调用一次,而不是在同一视图上的后续请求中调用。这是不真实的。在呈现视图之前调用preRenderView
事件。该视图在每个请求上呈现。这还包括ajax请求(如何为ajax请求生成必要的HTML输出?)。因此,您所看到的行为是完全可以预期的。你只是使用错误的工具来完成工作。
您应该使用@PostConstruct
bean的@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.
}
}