Bestimmen Sie die ID der JSF Behälterform
Frage
Ich brauche die ID ein Formularfeld innerhalb eines Action-Handler zu bestimmen. Das Feld ist ein Teil einer inbegriffen facelets Komponente und so wird die Form variiert.
included.xhtml
<ui:component>
<h:inputText id="contained_field"/>
<h:commandButton actionListener="#{backingBean.update}" value="Submit"/>
</ui:component>
example_containing.xhtml
<h:form id="containing_form">
<ui:include src="/included.xhtml"/>
</h:form>
Wie kann ich die ID der Form, in der update
Methode zur Laufzeit bestimmen? Oder noch besser, die ID des Eingabefeldes direkt.
Lösung
Binden Sie die Schaltfläche, um Ihren Backing Bean, dann verwenden getParent (), bis Sie die nächste Form finden.
Andere Tipps
Programmatically würde ich jsight Methode verwenden. Sie können die ID Ihrer Elemente kennen (es sei denn, Sie JSF sie erstellen lassen, ich weiß nicht, die Mittel in den IDs für die Nummerierung) durch es zu betrachten. h: Form ist ein Namenscontainer so lange, wie Sie nicht haben es in einem anderen Namenscontainer wickelte es containingForm sein wird: containedfield Die ‚:‘ ist die Namensgebung Separator ist standardmäßig JSF und die IDs werden so erstellt, etwa sowieso (parentNamingContainerId:) * componentId
Da Update-Methode des Typs Action ist, können Sie Ihre UI-Komponente wie folgt zugreifen
public void update(javax.faces.event.ActionEvent ac) {
javax.faces.component.UIComponent myCommand = ac.getComponent( );
String id = myCommand.getId(); // get the id of the firing component
..... your code .........
}