2013-11-14 68 views
0

我們要自動刷新使用GWT 2.我們用了很多的解決方案做它內置了網頁:GWT自動刷新代碼會跳轉到主頁

GWT auto refresh

automatic refresh of GWT screen

但他們都沒有正常工作。這個問題有點複雜:

自動刷新工作在主頁/標籤名爲「Kazalar」:

http://dl.dropbox.com/u/103580364/temp/000766.jpg

但是,如果用戶是在另一個選項卡,然後後自動刷新瀏覽器跳轉首頁/標籤:

http://dl.dropbox.com/u/103580364/temp/000767.jpg

在上面question's answer,回答者says,我們應該更換reloadAll()函數用代碼重新創建該部分的視圖(如果需要,某些Ajax調用可以從服務器重新獲取數據)。我們無法測試這部分,因爲我們不知道如何編寫重新生成特定部件視圖的代碼。有人可以舉例說明如何做到這一點?

public class TimerExample implements EntryPoint, ClickListener { 

    public void onModuleLoad() { 
    Button b = new Button("Click and wait 5 minutes"); 
    b.addClickListener(this); 

    RootPanel.get().add(b); 
    } 

    public void onClick(Widget sender) { 
    Timer t = new Timer 
     public void run() { 
     reloadAll(); 
     } 
    }; 

    // Schedule the timer to run once in 5 minutes. 
    t.schedule(5*1000*60); 
    } 

    private void reloadAll() { 
    Window.Location.reload(); 
    } 
} 
+2

當顯示「Kazalar」的地方時,您啓動此計時器,當調用Timer.run()時,您將調用與第一次加載該選項卡時用於填充數據的方法相同的方法。 –

+0

我會建議不要做一個Location.reload()。只需重新加載你的計時器顯示的數據。 –

回答

2

使用定時器是好的。假設你知道約GWT activities and places。 嚴酷的方法是重新加載使用完整的模塊

Window.Location.replace("url#kalazar:"); 

你已經mentionned它;但是一個更好的方法(假設你正在實現MVP模式)將是爲Kalazar視圖的主持人創建刷新方法。這樣你就不需要重新加載頁面。

private void reloadAll() { 
    myKalazarPresenter.refresh(); 
    } 

    private void myKalazarPresenter() { 
    myKalazarView.clear(); 
    myKalazerView.reInit(kalazarInitializationData); 
    } 

既然你說你不能重新看視圖,也許你可以試着刪除並重新創建它?