簡體   English   中英

如何強制Vaadin更新屏幕?

[英]How can I force Vaadin to update the screen?

我有一個小的Vaadin應用程序,它有幾個輸入字段(組合框,選擇組等...)。 其中大部分內容由第一個ComboBox的所選內容決定。 但是,當我選擇其中的內容時,所有其他內容都保持空白,直到我點擊一個,此時它們都會更新。 這不是期望的行為,但我認為它是由服務器端是最新的但不更新客戶端視圖引起的。 (即使在我的第一個Combobox的ValueChangeListener中添加requestRepaint())

必須有一些方法強制Vaadin獲取我希望它顯示的數據,即使沒有點擊其他組件?

編輯我不允許這么快就回答我自己的問題,所以我暫時把它放在這里:

我發現有一個javascript方法可以同步客戶端和服務器。

myComponent.getApplication().getMainWindow().executeJavaScript("javascript:vaadin.forceSync();");

我現在唯一的問題是,當我點擊另一個組合框(或兩次相同的組合框)時,我的一個組合框上的ValueChangeListener仍然只會觸發。 這是最奇怪的事情,因為第二個組合框在裝載時會完美地發射它的事件。

第一個ComboBox是否處於“立即”模式?

如果不是,它可能應該是:component.setImmediate(true)。

請參閱https://vaadin.com/book/-/page/components.selection.html

我遇到了同樣的問題,請看下面如何在8.0.5版本(2017年)中完成:

@Push
public class WebUi extends UI {
   public void fireComponentUpdated() {
      getUI().push();
   }
}

如果您為組件設置了強制vaadin重新渲染它們的數據源,則可以使用hack。 我使用它來更新具有動態數據的表

yourcomponent.setContainerDataSource(yourcomponent.getContainerDataSource());

你有沒有在正確的組件上請求重寫?

請記住, requestRepaint將組件標記為臟,但並不意味着它將被重新繪制 - 客戶端只有在向服務器發出請求時才能刷新。

有關您的選項的更多信息,請參閱此主題https://vaadin.com/forum/-/message_boards/view_message/231271 (它處理由於后台線程處理而導致的UI刷新)。

在Vaadin 7中 ,將這一行放在主UI.init(VaadinRequest)方法中就足夠了:

UI.getCurrent().setPollInterval( 1000 );

如果你想每秒刷新你的UI(在這種情況下)。 這樣,您可以指示UI輪詢服務器以查找定義的時間間隔內的更改。

請注意,如果您有許多用戶同時使用您的應用程序,那么過多的服務器流量可能會成為問題。

在Vaadin 6中,你必須使用ProgressIndicator(如果你願意,它可能是隱形的),並嘗試做類似於Vaadin 7中的UI.getCurrent()。setPollInterval(int)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM