Ich habe eine JSP 2.0 <ui:component>
, in der sich eine <p:dataTable>
mit einer Spalte befindet, die eine Composite verwendet, um einen speziellen Rahmen um einige Inhalte zu rendern. Nun muss ich das <p:dataTabe>
in einem Ajax gerenderten Attribut identifizieren, das sich im Inhalt befindet.Zugriff auf den übergeordneten Namenscontainer von Composite?
<ui:component>
<p:dataTable id="dataTable" var="userItem" ... />
<p:column>
<my:borderBox id="borderBox">
<p:commandButton
action="#{userController.doDelete(userItem.id)}"
value="delete"
update="?????"/> <!-- How to address the dateTable? -->
</my:borderBox>
</p:column>
</p:dataTable>
<ui:component>
Mein BorderBox:
<html xmlns:composite="http://java.sun.com/jsf/composite" ...>
<composite:interface>
<composite:attribute name="styleClass" default="" type="java.lang.String"/>
</composite:interface>
<composite:implementation>
<h:panelGroup ...>
...
<composite:insertChildren/>
</h:panelGroup>
</composite:implementation>
Meine Idee war so etwas wie
update=":#{component.namingContainer.parent.namingContainer.clientId}:dateTable
Aber component.namingContainer.parent
Nähte null zu bedienen.
Als ich die <p:commandButton>
mit diesen Aussagen ersetzen:
Parent ClientId 1: #{component}
Parent ClientId 2: #{component.namingContainer}
Parent ClientId 3: #{component.namingContainer.clientId}
Parent ClientId 4: #{component.namingContainer.parent}
Parent ClientId 5: #{component.namingContainer.parent.namingContainer}
ich diese Ausgabe:
Parent ClientId 1: [email protected]957419
Parent ClientId 2: [email protected]
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox
Parent ClientId 4:
Parent ClientId 5:
Ich habe keine Ahnung, was das Problem vor: dass es meine Idee mybey die Liste zu identifizieren abgeschlossen falsch oder da ein Fehler oder es gibt einen besseren Weg? (Aber ich kann absolut identifyer nicht zur dateTable verwenden fix!)
Versionen: Primeface 3.2, Mojarra 2.1.6 auf 3.1.2 Glassfish
Ich benutze leider nicht 'ui: component' Tag, also weiß ich nicht viel darüber; Ich verwende normalerweise Composite Components, die Sie von einem EL-Ausdruck aus dem übergeordneten Benennungscontainer wie '# {cc.parent.id}' referenzieren können. Ich denke jedoch, dass "Eltern" eine reservierte Variable in der EL-Ausdruckssprache ist, so dass es so einfach wie '# {parent.id}' sein sollte, um die Eltern-Namenscontainer-ID zu erhalten. –
@maple_shaft: '' wird implizit von Composite-Komponenten verwendet. Es ist daher sauberer, es direkt anstelle von zu deklarieren. –
BalusC
Welche JSF Impl/Version und PF Version verwenden Sie genau? – BalusC