2010-12-23 7 views
2

Wie in einer Datentabelle richtig einen ValueChangeListener mit UIInput Komponente zu implementieren, dann habe ich in einer Listener-Methode immer den Zeilenindex geändert hat bekommen, neuer Wert und alter WertJSF - ValueChangeListener in Datentabelle

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

Änderungen nicht unbedingt POST zum Server generieren, kann Post von anderen Ereignissen generiert werden.

Jede Hilfe, Danke.

Antwort

5

Bind den Wert der Datentabelle auf einen DataModel:

private DataModel<Item> dataModel; // +getter 

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

mit

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

diese Weise können Sie den aktuellen Index (und auch die aktuelle Item) im valuechangelistener zugreifen:

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

In Ihrer Bohne sollten Sie die Methode wie thi haben 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(); 
} 

Und jetzt haben Sie den Zeilenindex, alte und neue Werte.

Verwandte Themen