我实际上是在尝试创建自定义复合表组件,因为h:datatable或p:datatable不符合我的需要。然而,它应该像primefaces数据表一样使用。 找到JSF composite component childrens后 和 Expose items of a list while iterating within composite component我看到终点线,但现在我卡住了。
我的 xhtml :
<h:body>
<sm:datatable mode="columntoggle" id="mytable" value="#{managerBean.objects}" var="object">
<sm:column header="KeyHeader" property="key">
<h:outputText value="#{object.key}"/>
</sm:column>
<sm:column header="ValueHeader" property="value">
<h:outputText value="#{object.value}"/>
</sm:column>
</sm:datatable>
</h:body>
这是数据表合成:
<cc:interface>
<cc:attribute name="id" />
<cc:attribute name="mode" />
<cc:attribute name="var" />
<cc:attribute name="value" type="java.util.List"/>
</cc:interface>
<cc:implementation>
<table data-role="table" data-mode="#{cc.attrs.mode}" id="my-table">
<thead>
<tr>
<ui:repeat value="#{component.getCompositeComponentParent(component).children}" var="child">
<th>
<h:outputText value="#{child.attrs.header}"/>
</th>
</ui:repeat>
</tr>
</thead>
<tbody>
<ui:repeat value="#{cc.attrs.value}" var="object">
<tr>
<c:forEach items="#{cc.children}" var="child" varStatus="loop">
<cc:insertChildren/>
</c:forEach>
</tr>
</ui:repeat>
</tbody>
</table>
</cc:implementation>
这就是列合成
<cc:interface>
<cc:attribute name="header" />
<cc:attribute name="property" />
<cc:facet name="content"/>
</cc:interface>
<cc:implementation>
<td><cc:insertChildren/></td>
</cc:implementation>
thead 独立运作
tbody 独立运作
如上所述将它们放在一起我只能得到它。 thead总是留空任何建议? 感谢您提前的帮助!
答案 0 :(得分:4)
这不是一个错误,它实际上是按照mojarra设计的。使用cc:insertChildren将子项移动到cc:insertChildren标记的父标记。这个问题相当于另一个问题并且具有相同的解决方案。请参阅我对this question的回答。
基本上,你在OnResetPanel()
周围加上 self.sizername.Remove(self.child_panel)
self.child_panel.Destroy()
,将该片段绑定到FacesComponent bean中的属性。
答案 1 :(得分:1)
#{cc.children}
相当于
#{component.getCompositeComponentParent(component).children}
应该都有效
但由于某种原因,在某些版本中无法工作,我想这部分JSF仍然是小错误。
你试过吗
#{cc.getFacets().get('javax.faces.component.COMPOSITE_FACET_NAME').children}
请参阅此主题,
答案 2 :(得分:1)
我遇到了同样的问题。我的解决方法是使用renderFacet
,而不是insertChildren
。
迭代我使用的插入元素:#{cc.facets.yourFacetName.children}
并插入我使用过的元素:<composite:renderFacet name="yourFacetName"/>
。
答案 3 :(得分:1)
我发现在同一个组件中使用<composite:insertChildren />
迭代孩子和几乎是不可能的。至少在Mojarra 2.2.6实现中。
中间方面方法对我也不起作用。
最终,我的解决方案是:
encodeAll()
醇>
这个问题已有一年多了。如果有更简单的解决方案,请分享。