2010-12-23 81 views
2

如何正确实施ValueChangeListener有一个DataTable中UIInput组件,然后我得到的监听器方法得到的行索引已更改,新的价值和旧值JSF - ValueChangeListener DataTable中

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

变化,而不是必然生成POST到服务器,Post可能由其他事件生成。

任何帮助,谢谢。

回答

5

绑定DataTable的价值为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(); 
    // ... 
} 
2

在你的豆你应该有像thi这样的方法s:

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

现在你有行索引,旧的和新的值。