加载<c:foreach> lazily </c:foreach>的内容

时间:2013-04-09 19:29:02

标签: java jsf jstl lazy-loading

是否可以在具有<div>循环的<forEach>中实现实时滚动或延迟滚动。我在<div>中有以下代码,我想懒洋洋地加载内容。

<div class="update" id="update">

                    <c:forEach var="p" items="#{statusBean.statusList}"
                        varStatus="loop">
                        <h:form>
                            <c:if test="${p.statusmsg!=null}">
                                <div class="status">
                                                                //content
                                </div>
                            </c:if>
                        </h:form>
                    </c:forEach>
</div>

1 个答案:

答案 0 :(得分:2)

JSTL和EL都只能在页面的视图构建时间内完成(这由服务器完成)。 Ajax请求不属于视图构建时间,因为它们位于客户端浏览器中,因此JSTL和EL无法处理ajax请求。不过,您可以使用如下所述的普通servlet使用ajax:How to use Servlets and Ajax?

由于您在代码中使用JSF(基于使用延迟评估表达式,如#{statusBean.statusList}<h:form>)并假设您使用JSF 2+,因此{{3}中有一个很好的示例}} showcase:OmniFaces可扩展列表示例显示您可以对@RequestScoped托管bean进行ajax调用并检索JSON String并使用它更新客户端的值,如HTML dom。

基于<o:componentIdParam>的实时滚动示例:

$(window).scroll(function(){
    if  ($(window).scrollTop() == $(document).height() - $(window).height()){
       loadNewData();
    }
});

function loadNewData(){
    /* add code to fetch new content and add it to the DOM */
}