Ho un modello e nella sua definizione utilizzo diversi moduli e pulsanti.Ottieni l'ID del contenitore di denominazione principale nel modello per l'attributo render/update
Il problema è la definizione (define) Il file xhtml non conosce la gerarchia dei componenti.
E ad esempio voglio aggiornare l'elemento "tabella2" in una forma diversa nello stesso file di definizione.
Template Inserire:
<p:tabView id="nav"> <!-- nav -->
<ui:insert name="content_nav">content navigation</ui:insert>
</p:tabView>
definisce il primo livello della mia gerarchia "nav"
Template definire:
<ui:define name="content_nav">
<h:form id="form1"> <!-- nav:form1 -->
<h:dataTable id="table1"/> <!-- nav:form1:table1 -->
<p:inputText value="#{bean.value}"/>
<p:commandButton action="..." update="nav:form2:table2"/>
</h:form>
<h:form id="form2">
<h:dataTable id="table2"/> <!-- nav:form2:table2 -->
<!-- other elements -->
</h:form>
</ui:define>
Nel mio definire parte io non voglio sapere " nav "!
Come posso fare questo? o come posso spostare un componente di denominazione verso l'alto? o salvare l'id completo genitore più alto in una variabile?
a volte ho visto qualcosa di simile:
update=":table2"
ma non riuscivo a trovare nessuna informazione su questo ?, la documentazione JavaEE 6 appena cita le parole chiave @.
Grazie per la risposta. # {component.namingContainer.parent.namingContainer.clientId} funziona correttamente. Ma speravo in una soluzione più elegante (syntax sugar). Simile a "../" per le strutture di cartelle. Perché hai ancora scritto i due punti come prefisso? Sono nuovo di jsf quindi chiedo. E non penso che sia così brutto da quando usare il contenitore di nomi sconosciuto clientId direttamente è più brutto dato che potrei usare quel modello più volte. Penso che mi definirò una funzione EL per ottenere l'ID client di un contenitore di denominazione fratello. – djmj
I due punti sono il carattere di separazione predefinito 'NamingContainer' (che è sovrascrivibile da un parametro di contesto). Quando lo si utilizza come prefisso, verrà interpretato come ID client "assoluto", vale a dire che è stato risolto relativamente a 'UIViewRoot' al posto dell'attuale' NamingContainer' (che può essere il composito, o datatable, o modulo, ecc.). Per quanto riguarda la soluzione migliore, usa invece la funzione 'p: component()' (o quella homebrew). – BalusC
p: componente non funziona per me. Sono molto triste con questo comportamento JSF. Niente funziona. – MaikoID