【问题标题】:JSF - ValueChangeListener in DatatableJSF - 数据表中的 ValueChangeListener
【发布时间】:2011-05-29 17:34:55
【问题描述】:

如何在 Datatable 中使用 UIInput 组件正确实现 ValueChangeListener,然后我进入侦听器方法获取行索引已更改、新值和旧值

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

变化,不一定会产生POST到Server,Post可能是其他事件产生的。

任何帮助,谢谢。

【问题讨论】:

    标签: java jsf richfaces


    【解决方案1】:

    将数据表的值绑定到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】:

      在你的 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();
      }
      

      现在您有了行索引、旧值和新值。

      【讨论】:

        猜你喜欢
        • 2011-09-16
        • 2011-06-15
        • 2011-12-18
        • 2011-04-26
        • 2012-02-17
        • 2011-03-24
        • 2012-07-25
        • 1970-01-01
        • 2016-08-02
        相关资源
        最近更新 更多