Jsf 2 o:tree和p:panelGrid的错误表示

Jsf 2 o:tree和p:panelGrid的错误表示,jsf-2,primefaces,omnifaces,Jsf 2,Primefaces,Omnifaces,我想构建一个树,其中包含p:oanelGrid作为节点。像这样: <o:tree value="#{plannedElementsBean.tree}" var="item"> <o:treeNode level="0"> <o:treeNodeItem> <p:panelGrid columns="6"> <f:facet name="header">

我想构建一个树,其中包含
p:oanelGrid
作为节点。像这样:

<o:tree value="#{plannedElementsBean.tree}" var="item">
    <o:treeNode level="0">
        <o:treeNodeItem>
            <p:panelGrid columns="6">
                <f:facet name="header">
                    <h:outputText value="Header" />
                </f:facet>

                <o:treeInsertChildren />

                <p:panel><h:outputText value="Inner" /></p:panel>

                <f:facet name="footer">
                    <h:outputText value="Footer" />
                </f:facet>
            </p:panelGrid>                            
        </o:treeNodeItem>
    </o:treeNode>
</o:tree>


问题是,孩子们之间的垂直线丢失了
p:panelGrid
渲染其子级之间的垂直线。我用静态标记测试了它。但是,通过
o:tree
插入的所有子级都被视为第一个子级所在的位置,因此渲染为第一部分,而内部面板渲染为第二部分,由垂直线分割。我想有所有插入的儿童和内部面板被一条垂直线分开。这里出了什么问题?

这确实是预期的行为。
和friends是像
这样的UI组件,而不是像
那样的标记处理程序。
呈现每个UI组件子级的

您似乎认为
(相当于
)递归地生成多个JSF组件,最终取代
。事实并非如此。实际上,组件树中只有一个JSF组件,它根据当前迭代状态重复生成HTML输出。实际上只有一个
组件,它的所有HTML输出都以一个
结束

您最好的选择是使用固定宽度为16%的左浮动div,这样它们就可以在每6个项目之后中断到下一行。请注意,如果需要,可以在普通HTML元素上轻松重用PrimeFaces标准CSS类

另见:

再次感谢您的回答。这似乎是一个相当痛苦的jsf限制,不是吗?或者其他开发者不认为这是个问题吗?