JSF - Datatable中的ValueChangeListener

时间:2010-12-23 00:21:12

标签: java jsf richfaces

如何在Datatable中正确实现带有UIInput组件的ValueChangeListener,然后我进入侦听器方法获取行索引已更改,新值和旧值

<datatable>
<column>
  <input value="item.unitPrice" valueChangeListener="#{bean.myListener}">
</column>

更改,不一定生成POST到服务器,Post可能由其他事件生成。

任何帮助,谢谢。

2 个答案:

答案 0 :(得分:5)

将数据表的值绑定到DataModel

private DataModel<Item> dataModel; // +getter

public Bean() {
    this.dataModel = new ListDataModel<Item>(loadListOfItemsFromDatabase());
}

<h:dataTable value="#{bean.dataModel}">

这样您就可以在valuechangelistener中访问当前索引(以及当前Item):

public void myListener(ValueChangeEvent event) {
    int index = dataModel.getRowIndex();
    Item item = dataModel.getRowData();
    Object oldValue = event.getOldValue();
    Object newValue = event.getNewValue();
    // ...
}

答案 1 :(得分:2)

在你的bean中你应该有这样的方法:

public void myListener(ValueChangeEvent e){
    UIData data = (UIData) e.getComponent().findComponent("myDatatableId");
    int rowIndex = data.getRowIndex();
    Object myNewValue = e.getNewValue();
    Object myOldValue = e.getOldValue();
}

现在您拥有行索引,旧值和新值。