2012-02-24 124 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。 (在浏览器选项卡中单击,仅影响此浏览器选项卡)

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

问候。