mit insertChildren UND erste child-Attribute

Ich bin wirklich versucht, erstellen Sie eine benutzerdefinierte zusammengesetzte Tabelle-Komponente, da h:datatable oder p:datatable nicht zu meinen Anforderungen passen. Dennoch verwendet werden soll, wie ein primefaces datatable.
Nach und nach fand ich JSF composite component Kinder
und
Setzen Elemente einer Liste während der Iteration innerhalb der composite component Sah ich die Ziellinie, aber jetzt bin ich stecken geblieben.

Meine 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>

- Und dies ist die datatable composite:

<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>

... Und das ist die Spalte composite

<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 funktioniert standalone

tbody funktioniert standalone

Setzen Sie zusammen, wie oben bekomme ich nur tbody. thead bleibt immer leer, Irgendwelche Vorschläge?
Vielen Dank für Eure Hilfe im Voraus!

  • <table id="my-table - Umgehung JSF-id Verwendung von Namensräumen. Generell gilt: tun Sie das nicht - Sie sollten nur setzen, ids, um JSF-Komponenten, die nicht die grundlegenden HTML-tags. In diesem Fall, in der composite-Komponente haben, sollten Sie eine top-level-basic-HTML-tag, sondern setzen seine id zu #{cc.clientId}. So update="your_comp" arbeiten.
InformationsquelleAutor CrisbyJ | 2013-03-07
Schreibe einen Kommentar