2010-12-23 55 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(); 
} 

現在你有行索引,舊的和新的值。