Определить идентификатор формы контейнера JSF
Вопрос
Мне нужно определить идентификатор поля формы из обработчика действий.Поле является частью включенного компонента facelets, поэтому его форма может различаться.
включенный.xhtml
<ui:component>
<h:inputText id="contained_field"/>
<h:commandButton actionListener="#{backingBean.update}" value="Submit"/>
</ui:component>
пример_содержащий.xhtml
<h:form id="containing_form">
<ui:include src="/included.xhtml"/>
</h:form>
Как определить идентификатор формы в update
метод во время выполнения?Или, еще лучше, непосредственно идентификатор поля ввода.
Решение
Привяжите кнопку к своему компоненту поддержки, затем используйте getParent(), пока не найдете ближайшую форму.
Другие советы
Программно я бы использовал метод jsight.Вы можете узнать идентификатор своих элементов (если только вы не позволите JSF создавать их, я не знаю, как нумеровать идентификаторы), посмотрев на него.h:form — это контейнер именования, поэтому, пока вы не обернули его в другой контейнер именования, он будет содержать Form:containedfield. Разделитель имен «:» по умолчанию — JSF, и идентификаторы в любом случае создаются примерно так. , (parentNamingContainerId:)*comComponentId
Поскольку метод обновления имеет тип actionListener, вы можете получить доступ к своему компоненту пользовательского интерфейса следующим образом.
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 .........
}