2012-02-24 111 views
1

我正在開發一個使用Vaadin框架的應用程序。應用程序有一個主菜單,當用戶點擊菜單項,申請執行AbstractMenuCommand類的後代像Vaadin多個瀏覽器窗口/標籤

public class RunReportCommand extends AbstractMenuAction { 
@Override 
public void execute() throws MenuException { 
    Window = .... // create window here 
    openWindow(window); 
} 
protected void openWindow(Window window) { 
    application.getMainWindow().open(new ExternalResource(window.getURL())); 
    application.setMainWindow(window); 
} 

}

在此之後主瀏覽器窗口內容與所需的窗口代替。花費了大量的時間後,我來到了這個解決辦法:如果你想更換瀏覽器窗口中的內容與Vaadin窗口,你應該總是做

application.getMainWindow().open(new ExternalResource(window.getURL())); 
    application.setMainWindow(window); 

最近我有一個新的任務,一個功能添加到應用程序:用戶應具備的能力在不同的選項卡中打開窗口,所以問題是我只有一個主窗口在vaadin(和window.open只適用於主窗口),但用戶可以在diffirent瀏覽器選項卡中有很多diffirent窗口,所以如果用戶單擊瀏覽器選項卡中的菜單項不包含主窗口,重新加載無效窗口內容將不起作用。

回答

3

2011年,我與Vaadin開發團隊的成員討論了同一款Vaadin 6應用的多個Web瀏覽器窗口或標籤問題。他們強烈推薦這樣做。他們說盡管這是可能的,但這樣做需要很多努力並且往往是麻煩且容易出錯的。

相反,他們建議在單個瀏覽器窗口/選項卡中使用Vaadin TabSheet

TabSheet非常動態,所以您可以根據需要添加和刪除選項卡。根據我的經驗,性能出奇的快。請記住,只有最前面標籤的內容實際上在用戶的瀏覽器窗口中。其他選項卡的內容位於服務器的內存中,但不是Web瀏覽器/客戶端的負擔。雖然製表符不能被字符包裝,並且傾向於很寬,但TabSheet會自動提供滾動顯示的太多選項卡。

Vaadin 7的初步開發正在進行中。雖然他們承諾在7日審查窗口管理問題,但我不知道他們目前的工作。

1

直到Vaadin7的版本,你可以看看Navigator7附加(found here

Navigator7允許多瀏覽器標籤navigaton。 (在瀏覽器選項卡中單擊,僅影響此瀏覽器選項卡)

我們在我們的應用程序中使用它,它的工作非常好。

問候。