每个ajax请求都会调用preRenderView

时间:2013-11-14 10:14:48

标签: ajax jsf primefaces infinite-scroll prerenderview

我正在使用jquery waypoints和link之后的jsf实现无限滚动。 我有一个xhtml的prerender,需要无限滚动。 现在,当waypoint发送ajax请求时,为什么每个滚动它调用prerender,这意味着整个页面都被重新刷新。 请让我知道如何解决这个问题。

1 个答案:

答案 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.
    }
}

另见: