I have some facelet components and want to use them in a h:dataTable. My components containing some form elements like h:inputText, command buttons and so on. To avoid scrolling, I have placed them into a a4j:form.
Now in my h:dataTable loop I call these facelet components and want to have a list of inputText components for example. But every time, I typed in something, only the last input field called correct my setValue() method. All other input components dosn’t call the setter.
Here a very small example to imagine the problem:
The datatable
<h:dataTable value="myBackingBean.list" var="currentItem">
<h:column>
<waffel:input item="#{currentItem}"/>
</h:column>
</h:dataTable>
The facelet component:
...
<a4j:form>
<h:inputText size="30" value="#{item.value}"/>
<a4j:commandButton value="ok" action="#{item.applyValue}"/>
</a4j:form>
...
To get this to work you have to place a a4j:region around the a4j:form!
...
<a4j:region>
<a4j:form>
<h:inputText size="30" value="#{item.value}"/>
<a4j:commandButton value="ok" action="#{item.applyValue}"/>
</a4j:form>
</a4j:region>
...
Now it works fine.