Бих искал да имам приложение 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()
принуждава потребителския интерфейс да се опреснява без взаимодействие с потребителя. Така че сега действието doSomething()
се изпълнява в navigationView веднага щом се достигнат 2 секунди.
Единственото ми останало безпокойство е колко натоварва това сървъра, но поне е разумно решение. Потвърдих отговора ти.
РЕДАКТИРАНЕ 2: Само за да бъде пълно, за да сме сигурни, че няма да се сблъскаме с невалидна грешка при достъп до нишка, тъй като актуализираме дисплей от друг дисплей, в метода doSomething()
трябва да изпълним действия използвайки display.asyncExec
:
Display display = Display.getCurrent();
public void doSomething() {
display.asyncExec(new Runnable() {
public void run() {
treeViewer.refresh();
}
});
}