如何在Datatable中正确实现带有UIInput组件的ValueChangeListener,然后我进入侦听器方法获取行索引已更改,新值和旧值
<datatable>
<column>
<input value="item.unitPrice" valueChangeListener="#{bean.myListener}">
</column>
更改,不一定生成POST到服务器,Post可能由其他事件生成。
任何帮助,谢谢。
答案 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();
}
现在您拥有行索引,旧值和新值。