我想构建一个以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
插入的所有子项被视为第一个子项所在的位置,因此呈现为第一个部分,而内部面板呈现为第二个部分,除以垂直线。我希望所有插入的孩子和内部面板被垂直线分开。这里出了什么问题?
答案 0 :(得分:2)
这确实是预期的行为。 <o:tree>
和朋友是像<ui:repeat>
这样的UI组件,而不是像<c:forEach>
这样的标记处理程序。 <p:panelGrid>
为每个UI组件子级呈现<td>
。
您似乎认为<o:tree>
(和等效<ui:repeat>
)递归生成多个JSF组件,最终取代<o:treeInsertChildren>
。这不是真的。在组件树中实际上只有一个JSF组件,它根据当前的迭代状态重复生成其HTML输出。实际上只有一个<o:treeInsertChildren>
组件,其所有HTML输出最终都在<td>
<p:panelGrid>
个{{1}}。
您最好的选择是使用固定宽度为16%的左浮动div,以便在每6个项目后突破到下一行。请注意,如有必要,您可以轻松地在纯HTML元素上重用PrimeFaces标准CSS类。