4

我正在使用 jquery waypoints 和 jsf 以下链接实现无限滚动。我对需要无限滚动的 xhtml 之一进行了预渲染。现在,由于航点发送 ajax 请求,所以为什么每次滚动都调用 prerender,这意味着整个页面都在刷新。请让我知道如何解决这个问题。

4

1 回答 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 回答