Get id der übergeordneten naming container in der Vorlage für render / update-Attribut
Ich habe eine Vorlage, und in seiner Definition, die ich benutze mehrere Formulare und Schaltflächen.
Das problem ist die definition (definieren) der xhtml-Datei nicht kennen, die die Komponentenhierarchie abbildet.
Und zum Beispiel ich will update das element "Tabelle2" in eine andere form in der gleichen Datei bestimmen.
Einfügen Der Vorlage:
<p:tabView id="nav"> <!-- nav -->
<ui:insert name="content_nav">content navigation</ui:insert>
</p:tabView>
definiert die erste Ebene meiner Hierarchie "nav"
Vorlage definieren:
<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>
In meiner definieren, die Teil ich will es gar nicht wissen "nav"!
Wie kann ich dies tun? oder wie kann ich eine naming-Komponente nach oben?, oder speichern Sie die höchsten übergeordneten komplette id in eine variable?
manchmal sah ich etwas wie:
update=":table2"
Aber ich konnte nicht finden alle Informationen über dieses?, der Java ee 6 Dokumentation nur erwähnt das @ keywords.
InformationsquelleAutor der Frage djmj | 2012-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hässlich, aber dies sollte für Sie arbeiten:
Als Sie bereits verwenden, PrimeFaces, eine alternative ist die Nutzung
#{p:component(componentId)}
diese helper-Funktion scannt die gesamte Ansicht Wurzel für eine Komponente mit der angegebenen ID und gibt dann seine client-ID:InformationsquelleAutor der Antwort BalusC
hässliche Antwort funktioniert gut
vor allem nützlichere Updates von geöffneten dialog an übergeordnete datatable
InformationsquelleAutor der Antwort user2120191
Versuchen Sie dies:
InformationsquelleAutor der Antwort Ventsislav Marinov
Zusätzlich zu den oben genannten Lösungen, ich hatte das problem, dass ich hatte, um dynamisch zu generieren, die zu aktualisierten Komponenten (viele) basiert auf server-side Logik (mit vielleicht schwieriger, um herauszufinden, Verschachtelung).
So dass die Lösung auf der server-Seite ist eine entspricht
update=":#{p:component('table2')}"
1die verwendetorg.primefaces.util.ComponentUtils.findComponentClientId( String designId )
:genannt über einige andere Methode Verwendung, wie z.B.
... update="#{foo.getCompListComputed( 'triggeringCompId' )}"
.1: ersten ich habe versucht, ohne allzu viel darüber nachzudenken zurück
public static String getCompListSpaced0() { return ":#{p:component('table2')}" ; }
in einem... update="#{foo.getCompListSpaced0()}
Ausdruck, was natürlich (nachdem Sie darüber nachgedacht, wie das framework funktioniert 🙂 ) nicht behoben ist (die zurückgegeben wird) und kann dazu führen, die Probleme, die einige Benutzer hatten. Auch mein Eclipse /JBoss Tools-Umgebung vorgeschlagen, zu schreiben:#{p.component('table2')}
("." anstatt ":"), die nicht geholfen haben - natürlich.InformationsquelleAutor der Antwort Andreas Dietrich
Können Sie verwenden
binding
Attribut zu deklarieren EL-variable gebunden JSF-Komponente. Dann können Sie den Zugriff absoluten client-id der Komponente durch die Verwendung vonjavax.faces.component.UIComponent.getClientId()
. Siehe Beispiel unten:InformationsquelleAutor der Antwort Dmitry Trifonov