Search code examples
javajsfrichfaces

JSF - ValueChangeListener in Datatable


How to implement correctly a ValueChangeListener with UIInput Component within a Datatable, then i getting in a listener method get the row index has changed, new value and old Value

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

Changes, not necessarily generate POST to Server, Post may be generated by others events.

Any Help, Thanks.


Solution

  • Bind the datatable's value to a DataModel:

    private DataModel<Item> dataModel; // +getter
    
    public Bean() {
        this.dataModel = new ListDataModel<Item>(loadListOfItemsFromDatabase());
    }
    

    with

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

    This way you can access the current index (and also the current Item) in the valuechangelistener:

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