Eclipse RAP мулти-прозорец/раздел

Бих искал да имам приложение 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();
        }
    });
}

person Jarod    schedule 02.02.2016    source източник


Отговори (1)


С текущата архитектура на RAP не можете да разпределите прозорците на работната маса в различни раздели на браузъра. Всеки нов браузър стартира нов UISession, който предполага друг Display (вижте Обхвати в RAP).

Въпреки това, HttpSession трябва да е същият (освен ако не сте изключили бисквитките), така че можете да използвате това като средство за комуникация между различни раздели на браузъра.

person ralfstx    schedule 03.02.2016
comment
Благодаря за пояснението, добре, това е добра отправна точка, така че последващият ми въпрос би бил, възможно ли е да се задейства събитие в потребителския интерфейс на един раздел без щракване от страна на потребителя. Идеята ми тук е събитията от друг раздел да извикат опресняване (или нещо друго) в раздела? - person Jarod; 03.02.2016
comment
Редактирах въпроса си, който отговаря на следващия ми въпрос :) Благодаря! - person Jarod; 03.02.2016
comment
Да, използването на ServerPush е единственият начин за актуализиране на потребителския интерфейс без взаимодействие с потребителя. На сървъра той поддържа сокет за заявка отворен, така че да, има малко излишни разходи, плюс някои прокси сървъри не харесват дългогодишни заявки. Ето защо препоръчваме да го активирате SP само докато е необходимо (напр. за показване на напредъка за изпълняваща се операция и т.н.) - person ralfstx; 04.02.2016
comment
Добре, благодаря, ще добавя код за стартиране на ServerPush само когато са включени няколко раздела. Също така редактирах въпроса си за читателите, за да знаят как да се отърват от невалидния достъп до нишката, който ще възникне, ако използват няколко раздела, както правя аз. Благодаря за приноса ви, работи добре не за мен. наздраве - person Jarod; 04.02.2016