5 Stimmen

Wie verweist man auf die übergeordnete Tabelle dataTable innerhalb der Tabelle dataTable?

Betrachten Sie einen Dummy-Fall:

<h:form id="wrapperForm">
    <h:panelGroup id="rowsContainer">
        <h:dataTable id="rowsTable" value="#{bean.rows}" var="row" >
            <h:column>
                <h:commandButton value="Click me to update (#{component.parent.parent.parent.clientId})">
                    <f:ajax render=":#{component.parent.parent.parent.clientId}" />
                </h:commandButton>
            </h:column>
        </h:dataTable>
    </h:panelGroup>
</h:form>

Beim Klicken auf die Schaltfläche wird die id=rowsContainer erfolgreich aktualisiert wird, wie es sein sollte.

Wenn ich jedoch Folgendes hinzufüge ui:repeat Dort funktioniert es nicht mehr:

<h:form id="wrapperForm">
    <ui:repeat id="blocksRepeat" var="block" value="#{bean.blocks}">
        <h:panelGroup id="rowsWrapper">
            <h:dataTable id="rowsTable" value="#{block.rows}" var="row" >
                <h:column>
                    <h:commandButton value="Click me 2 update (#{component.parent.parent.parent.clientId})">
                        <f:ajax render=":#{component.parent.parent.parent.clientId}" />
                    </h:commandButton>
                </h:column>
            </h:dataTable>
        </h:panelGroup>
    </ui:repeat>
</h:form>

Stattdessen wird dies:

<f:ajax> contains an unknown id ':wrapperForm:blocksRepeat:0:rowsWrapper' - cannot locate it in the context of the component j_idt363

Die Komponente ist jedoch wirklich mit dieser ID vorhanden, so dass die EL in Ordnung sein sollte. Irgendwie ist die ui:repeat bricht den Fall. Wird möglicherweise versucht, die EL vor der eigentlichen Schleife auszuwerten?

Wie beziehen Sie sich auf die rowsWrapper Element innerhalb der dataTable?

Anmerkung: Kürzlich fragte ich nach ungerade dataTable-Benennung innerhalb von ui:repeat die stellte sich als Fehler heraus . Dieses Problem sollte jedoch nicht damit zusammenhängen, da ich die dataTable wie vorgeschlagen in eine panelGroup einfüge aquí .

3voto

Tuukka Mustonen Punkte 4544

Es laufen eigentlich zwei Dinge schief:

1) ui:repeat ist defekt

Wie von BalusC in den Kommentaren zu der Frage beantwortet, tritt das erste Problem (wieder einmal) auf, weil ein Fehler in Mojarra . Es scheint ui:repeat ist so kaputt, dass sogar der Wrapper-Container, der die h:dataTable ist nicht hilfreich. Für weitere Einzelheiten siehe Frage " Warum erhält h:dataTable in ui:repeat nicht die richtige ID? " und die Kommentare zu dieser Frage.

Wie BalusC vorschlägt, ist eine Abhilfe die Verwendung von h:dataTable anstelle von ui:repeat . Es wird unbequeme ( <table> ) HTML, funktioniert aber. Dadurch werden einige merkwürdige Probleme beim Hinzufügen und Entfernen von Zeilen zur/aus der inneren Iteration beseitigt.

Hinweis: Einige Fragen zu ui:repeat scheinen in Mojarra 2.0.3 behoben zu sein, aber nicht alle.

2) Die Referenzen fallen einfach aus

Auch bei h:dataTable Umgehung, der Verweis auf den inneren h:dataTable von der Taste im Inneren versagt. Da es keine ui:repeat verwendet wird, muss es sich um ein internes Problem von datatable handeln. Ich sehe im Moment keine Lösung, also habe ich ebenfalls ein Ticket für dieses Verhalten eingereicht .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X