Determinare l'ID del modulo contenitore JSF
Domanda
Devo determinare l'ID di un campo modulo all'interno di un gestore azioni. Il campo fa parte di un componente facelets incluso e quindi il modulo varierà.
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>
Come posso determinare l'ID del modulo nel metodo update
in fase di esecuzione? O meglio, l'ID del campo di input direttamente.
Soluzione
Associa il pulsante al tuo backing bean, quindi usa getParent () fino a trovare il modulo più vicino.
Altri suggerimenti
A livello di programmazione userei il metodo di jsight. Puoi conoscere l'id dei tuoi elementi (a meno che non lasci che JSF li crei, non conosco i mezzi per numerare gli ID) osservandolo. h: form è un contenitore di denominazione, quindi finché non lo si avvolge in un altro contenitore di denominazione conterràForm: contenutefield Il ':' è il separatore di denominazione di default è JSF e gli ID vengono creati in questo modo, all'incirca comunque , (parentNamingContainerId:) * componentId
Poiché il metodo di aggiornamento è di tipo actionListener, è possibile accedere al componente UI come segue
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 .........
}