Mam JSP 2.0 <ui:component>
, w tym jest <p:dataTable>
z kolumną, która używa złożonego do renderowania specjalnej granicy o niektórych treści. Teraz muszę zidentyfikować <p:dataTabe>
w atrybucie renderowanym ajax, który znajduje się w treści.Jak uzyskać dostęp do nadrzędnego kontenera nazewnictwa złożonego?
<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>
Moja 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>
Mój pomysł był użyć czegoś jak
update=":#{component.namingContainer.parent.namingContainer.clientId}:dateTable
Ale component.namingContainer.parent
szwach być zerowa.
Kiedy wymienić <p:commandButton>
z tym oświadczenia:
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}
uzyskać ten wynik:
Parent ClientId 1: [email protected]
Parent ClientId 2: [email protected]
Parent ClientId 3: main_form:profilTabView:dataTable:0:borderBox
Parent ClientId 4:
Parent ClientId 5:
nie mam pojęcia, na czym polega problem to: mybey mój pomysł, aby zidentyfikować lista jest kompletna źle czy jest jakiś błąd, czy jest lepszy sposób? (Ale nie mogę użyć naprawić absolutną identifyer dla dateTable!)
Wersje: Primeface 3.2, Mojarra 2.1.6 na GlassFish 3.1.2
Niestety nie używam znacznika 'ui: component', więc nie wiem zbyt wiele na ten temat; Zazwyczaj używam Komponentów Kompozytowych, z których można odwołać się za pomocą wyrażenia EL, rodzicielskiego kontenera nazw, takiego jak '# {cc.parent.id}'. Myślę jednak, że 'parent' jest zmienną zarezerwowaną w języku wyrażeń EL, więc powinno być tak proste, jak' # {parent.id} ', aby powrócić do nadrzędnego identyfikatora kontenera nazw. –
@maple_shaft: '' jest niejawnie używane przez komponenty kompozytowe. Dlatego czystszym jest deklarowanie go bezpośrednio zamiast "". –
BalusC
Którą wersję JSF impl/version i PF dokładnie używasz? – BalusC