Question

I need to determine the ID of a form field from within an action handler. The field is a part of a included facelets component and so the form will vary.

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>

How may I determine the ID of the form in the update method at runtime? Or better yet, the ID of the input field directly.

Was it helpful?

Solution

Bind the button to your backing bean, then use getParent() until you find the nearest form.

OTHER TIPS

Programmatically I would use jsight's method. You can know the id of your elements (unless you let JSF create them, I don't know the means for numbering in the ids) by looking at it. h:form is a naming container so as long as you don't have it wrapped in another naming container it will be containingForm:containedfield The ':' is the naming separator by default is JSF and the ids are created like this, roughly anyway, (parentNamingContainerId:)*componentId

Since update method is of type actionListener, you can access your UI component as follows

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 .........

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top