我实际上试图创建一个自定义的复合表组件,因为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总是空着,有什么建议吗?
感谢您对Advance的帮助!

最佳答案

这不是错误,实际上是按照mojarra中的设计工作的。使用cc:insertChildren将子级移动到cc:insertChildren标记的父标记。此问题等效于另一个问题,并且具有相同的解决方案。请参阅我对this question的回答。

基本上,您在<ui:fragment>周围放了一个<cc:insertChildren>,将该片段绑定(bind)到FacesComponent bean中的属性。

10-08 01:31