【发布时间】:2013-11-27 07:17:33
【问题描述】:
我在 link 之后使用 jquery waypoints 和 jsf 实现无限滚动。 我对需要无限滚动的 xhtml 之一进行了预渲染。 现在,由于航点发送 ajax 请求,所以为什么每次滚动都调用 prerender,这意味着整个页面都在刷新。 请告诉我如何解决这个问题。
【问题讨论】:
标签: ajax jsf primefaces infinite-scroll prerenderview
我在 link 之后使用 jquery waypoints 和 jsf 实现无限滚动。 我对需要无限滚动的 xhtml 之一进行了预渲染。 现在,由于航点发送 ajax 请求,所以为什么每次滚动都调用 prerender,这意味着整个页面都在刷新。 请告诉我如何解决这个问题。
【问题讨论】:
标签: ajax jsf primefaces infinite-scroll prerenderview
您似乎认为preRenderView 事件在视图构建期间仅被调用一次,并且不会在同一视图的后续请求中调用。这是不真实的。 preRenderView 事件在视图呈现之前被调用。 每个请求都会呈现视图。这还包括 ajax 请求(它应该如何为 ajax 请求生成必要的 HTML 输出?)。因此,您所看到的行为是完全可以预料的。您只是使用了错误的工具来完成这项工作。
您应该使用@ViewScoped bean 的@PostConstruct 方法,
@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.
}
}
【讨论】: