Определите идентификатор формы контейнера JSF - PullRequest
3 голосов
/ 23 сентября 2008

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

включено.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 во время выполнения? Или, еще лучше, идентификатор поля ввода напрямую.

Ответы [ 3 ]

5 голосов
/ 23 сентября 2008

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

0 голосов
/ 05 ноября 2008

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

}
0 голосов
/ 01 октября 2008

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

...