Просто свяжите раскрывающееся значение со свойством текущего итерированного элемента.
<h:dataTable value="#{metadata.placeholders}" var="placeholder">
<h:column>
<h:selectOneMenu value="#{placeholder.element}">
<f:selectItems value="#{placeholder.elements}" />
</h:selectOneMenu>
</h:column>
</h:dataTable>
<h:commandButton value="Submit" action="#{metadata.submit}" />
(обратите внимание, что я исправил бессмысленный <h:selectOneListbox size="1">
с помощью <h:selectOneMenu>
)
Когда вы отправляете форму, JSF просто устанавливает значение в свойстве element
повторного объекта Placeholder
. Если вы намереваетесь получить к нему доступ по отдельности, просто зацикливайтесь на placeholders
в методе действия.
public void submit() {
for (Placeholder placeholder : placeholders) {
System.out.println(placeholder.getElement()); // Look, JSF has already set it.
}
}