如何在与按钮相同的数据表行中获取输入组件的值?

时间:2011-03-17 22:16:06

标签: java jsf jsf-2

我有一个数据表,其中行是动态的,每行包含selectOneMenu。如果我在每一行都有一个按钮,并且我想在selectOneMenu上获取所选项目,那么最好的方法是什么?

1 个答案:

答案 0 :(得分:4)

将数据集value中的数据集包裹在DataModel<E>

private List<Item> items;
private DataModel<Item> model;  // +getter

@PostConstruct
public void init() {
    this.items = loadItSomehow();
    this.model = new ListDataModel<Item>(items);
}

(此示例中的Item只是代表每一行的javabean类,例如PersonProduct等)

将其绑定到数据表的value

<h:dataTable value="#{bean.model}" var="item">

如果下拉列表绑定到Item的属性,并且该按钮绑定到同一个bean的方法...

<h:column>
    <h:selectOneMenu value="#{item.value}">
        <f:selectItems value="#{bean.values}" />
    </h:selectOneMenu>
</h:column>
<h:column>
    <h:commandButton value="submit" action="#{bean.submit}" />
</h:column>

...然后您可以按DataModel#getRowData()获取当前项目,并且相应地在操作方法中获取所选值,如下所示:

public void submit() {
    Item item = model.getRowData();
    String value = item.getValue();
    // ...
}