我想要一个多选项卡/带窗口的Eclipse RAP应用程序。
我可以使用打开第二个窗口
UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class);
launcher.openURL("/gasf?foo=other_perspective");
我在哪里使用foo参数选择我想要的个性。但是,使用此方法将创建单独的http会话,因此各种侦听器等将无法与我的第一个窗口通信。
我也尝试使用打开第二个窗口/页面
PlatformUI.getWorkbench()。getActiveWorkbenchWindow()。openPage(“ other_perspective”,null);
但这只会更改当前的窗口透视图,而不会在浏览器中打开第二个窗口或选项卡。
有没有人实现了多标签RAP应用程序,并且在标签之间使用了工作选择器?
感谢您的任何帮助,您可以提供
编辑:非常感谢ralfstx,正如您所指出的,到目前为止,我可以使用共享的HTTP会话共享侦听器或任何东西。现在,下一步是能够基于外部事件更新选项卡。
为了尝试从另一个选项卡刷新的想法,我做了一个虚拟计时器,该计时器在2秒后执行以下操作(即模拟从另一个选项卡触发的内容):
final ServerPushSession pushSession = new ServerPushSession();
pushSession.start();
Display display = Display.getDefault();
NavigationView navigationView = ((NavigationView) window.getActivePage().findView(NavigationView.ID));
timer.schedule(new TimerTask() {
@Override
public void run() {
display.asyncExec(new Runnable() {
public void run() {
navigationView.doSomething();
}
});
}
}, 2000);
这可行!该pushSession.start()
部队的UI刷新无需任何用户交互。因此,现在doSomething()
只要达到2秒钟,就会在navigationView上执行操作。
我唯一剩下的担心是,这会给服务器带来多少负载,但至少是一个合理的解决方案。我确认了你的答案。
EDIT2:只是为了完整起见,为了确保不会因为从另一个显示更新一个显示而导致无效的线程访问错误,在该doSomething()
方法中,我们必须使用display.asyncExec
以下方法执行操作:
Display display = Display.getCurrent();
public void doSomething() {
display.asyncExec(new Runnable() {
public void run() {
treeViewer.refresh();
}
});
}
使用RAP的当前体系结构,您无法将工作台窗口分布在不同的浏览器选项卡上。每个新的浏览器都会启动一个新的浏览器UISession
,这意味着另一个浏览器Display
(请参阅RAP的Scopes)。
但是,它们HttpSession
应该相同(除非您已关闭Cookie),因此您可以将其用作在不同浏览器标签之间进行通信的一种方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句