2017-06-13 58 views
0

在基於Vaadin 8的應用程序中,我想實現刪除所有字段值的命令。我已經完成了這個使用活頁夾。當用戶激活命令時,將創建一個新的Bean。如何確定用戶界面中的組件是否已在Vaadin 8中更新

@Override public void menuSelected(MenuBar.MenuItem selectedItem) { 

    controller.createNewBean(); 
    Page.getCurrent().reload(); 

} 

我想顯示一個消息框給用戶,警告通過繼續處理所有組件的所有值將會丟失。我正在使用TabView,並且有相對較多的組件。
我想僅在用戶更改了至少一個組件的值時才顯示此消息。 我想知道Vaadin是否有類似UI.getCurrent().isDirty()或其他機制來確定用戶是否爲組件輸入了新值?

感謝您的幫助

回答

0

您可能需要使用binder.hasChanges()。這基本上檢查您的字段和綁定到這些字段的基礎bean是否因用戶交互而不同。

從Vaadin的文檔:

檢查是否有任何束縛字段的值已經從去年顯式調用改爲setBean(對象),readBean(對象),removeBean(),writeBean(對象)或writeBeanIfValid (目的)。

請參閱Vaadin's API和Vaadin Doc的章節Binding Data to Forms瞭解更多信息。

隨着Page.getCurrent().reload()你得到一個新的用戶界面,所有的組件被重置,就像你打開一個新的標籤。要重置您的組件,我建議使用binder.readBean(theNewBeanWithFreshValues)。這將綁定字段的值設置回bean的值。

+0

謝謝@Axel Meier。這似乎是唯一的方法是binder.hasChanges()。問題是我有不同的豆和不同的選項卡,我必須知道許多粘合劑。因爲這個,我正在使用reload而不是readBrean。 – Govan

+0

我用binder hasChanges測試了實現。它不像文檔中描述的那樣工作。看到這個:https://vaadin.com/forum/#!/thread/14906891/15007809 – Govan

+0

@Govan謝謝你的反饋。事實上,'hasChanges()'與'readBean()'和'writeBean()'結合使用更有意義。用'setBean()'改變會自動提交'hasChanges()'將返回false。同樣用'setBean()'也無法恢復舊值。 –