Определить идентификатор формы контейнера JSF


3

Мне нужно определить идентификатор поля формы из обработчика действий. Поле является частью включенного компонента facelets, поэтому форма будет отличаться.

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> 

Как можно определить идентификатор формы в методе update во время выполнения? Или еще лучше, идентификатор поля ввода напрямую.

5

Привяжите кнопку к вашему бэк-файлу, затем используйте getParent(), пока не найдете ближайшую форму.

  0

Вот что я боялся. Я надеялся на что-то более чистое. 23 сен. 082008-09-23 19:39:55


0

Программным образом, я бы использовал метод jsight. Вы можете узнать идентификатор своих элементов (если вы не позволите JSF создавать их, я не знаю средств для нумерации в идентификаторах), посмотрев на него. h: form является именованным контейнером, так что пока вы его не заворачиваете в другой контейнер именования, он будет содержатьForm: containsfield. По умолчанию разделитель имен: JSF, и идентификаторы создаются примерно так же, как и все (parentNamingContainerId:) * ComponentID


0

поскольку метод обновления типа 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 ......... 

}