使用include和h:datatable进行递归

时间:2015-08-06 01:30:51

标签: jsf jsf-2 jstl

我在尝试recursively include pages时遇到了一些麻烦。问题是所有的包含实际上都发生了,但是h:dataTable发生了一些事情,因此第二个包含的数据表内容没有被显示出来。我猜测问题来自var发布与自己并发。它没有数据表。

所以从page.xhtml我调用了post_view2.xhtml的include:

<ui:include src="/template/includes/post_view2.xhtml" >
    <ui:param name="postList" value="#{watchThread.listeFirstPosts}"></ui:param>
    <ui:param name="count" value="8"></ui:param>            
</ui:include> 

计数设为8。

这是post_view2.xhtml:

<ui:composition xmlns=....>
<h:dataTable var="post" value="#{postList}" styleClass="fullWidth">
<h:column>      
            #{post.posts.size()} <!-- gives a size higher than 0 -->
    <h:outputText value="#{watchThread.sanitize(post.content)}"/>

    <c:if test="${count gt 0}">                 
        <ui:include src="/template/includes/post_view2.xhtml">
            <ui:param name="postList" value="#{post.replies}"></ui:param>
            <ui:param name="count" value="${count-1}"></ui:param>
        </ui:include>
    </c:if>
</h:column>
</h:dataTable>
</ui:composition>

请注意,在第一个包含post var等于列表。在第二个包括我试图使它等于另一个列表,我认为这是导致问题的原因。我不知道为什么以及如何解决它。 在旁注上我使用jstl c:if,但如果有另一个纯jsf的解决方案,则包含的主要内容我会接受它。

1 个答案:

答案 0 :(得分:1)

我找到了一些解决方法,但我还没有回答这个问题。

我没有使用DataTable,而是使用jsp标签forEach,它可以正常工作。

所以不要这样:

<h:dataTable var="post" value="#{postList}">

我有:

<c:forEach var="post" items="#{postList}">

我不知道为什么这有效,而dataTable也没有。如果有人知道请扩展。