2017-02-27 93 views
2

在Vaadin 8,給出下面的網格定義:Vaadin 8網格EditorSaveListener

grid = new Grid<>(); 
    grid.getEditor().setEnabled(true); 
    carBinder = grid.getEditor().getBinder(); 

與:

grid.getEditor().addSaveListener(event -> { 
    try { 
     Binder<Car> binder = event.getSource().getBinder(); 
     grid.getDataProvider().refreshAll(); 
    } catch(Exception e) 
     ExceptionNotification.show(e); 
    } 
    }); 

我的問題,我目前無法從網格編輯器訪問修改值,既不超過event.getSource(),也不在本地或在類作用域中定義的活頁夾上。

在調試器中,我看到Vaadin類com.vaadin.ui.components.grid.EditorImpl一個編輯過的屬性,包含這些值,但是是私有的,因此無法訪問。

調試中的binder.bean值爲NULL。這將是由binder.getBean()檢索的值。

所以我嘗試了很多方法,但目前我無法使用保存監聽器獲得編輯值,因此無法使用它,並搜索一些幫助或靈感來解決問題。

+1

你試過'binder.writeBean(aCarObject)'來獲取值?根據文檔,它將字段的值寫入給定的對象,但如果任何字段無效則拋出異常。 –

+0

謝謝。作品。有一個getBean()操作時,使用寫操作來獲取數據是很奇怪的。 但它的工作。 – Lexx

+0

太好了。我在下面添加了答案,所以你可以檢查它。 :) –

回答

1

要得到的值,用:

binder.writeBean(aCarObject); 

根據文檔它字段的值寫入到給定的對象,而是拋出一個異常,如果任何字段無效。