Я хотел бы иметь приложение EAP для Eclipse с несколькими вкладками/окнами.Eclipse RAP multi-window/tab
Я могу открыть второе окно с помощью
UrlLauncher launcher = RWT.getClient().getService(UrlLauncher.class);
launcher.openURL("/gasf?foo=other_perspective");
Где использовать Foo для параметра Я выбрать perspetive я хочу. Однако использование этого метода создаст промежуточный сеанс http, поэтому различные слушатели и т. Д. Не будут связываться с моим первым окном. .
Я также попытался открытия второго окна/страницы с помощью
PlatformUI.getWorkbench() getActiveWorkbenchWindow() openPage ("other_perspective", NULL).
Но это просто изменяет текущую перспективу окна, но не открывает второе окно или вкладку в моем браузере.
Кто-нибудь достигло приложения с несколькими вкладками RAP с рабочими выборами между вкладками?
Спасибо за любую помощь вы можете предоставить
EDIT: БЛАГОДАРЯ много 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()
выполняется на навигационном экране, как только достигнуты 2 секунды.
Моя единственная оставшаяся проблема - сколько нагрузки это ставит на сервер, но ее разумное решение по крайней мере. Я подтвердил ваш ответ.
EDIT2: Просто чтобы быть полными, чтобы убедиться, что не врезаться в недопустимом доступе Thread, поскольку мы обновляем дисплей с другого дисплея, в doSomething()
методы мы должны выполнить действия, используя display.asyncExec
:
Display display = Display.getCurrent();
public void doSomething() {
display.asyncExec(new Runnable() {
public void run() {
treeViewer.refresh();
}
});
}
Спасибо за разъяснение, хорошо, что это хорошая отправная точка, поэтому мой последующий вопрос будет состоять в том, можно ли инициировать событие на пользовательском интерфейсе одной вкладки без какого-либо щелчка пользователем. Моя идея здесь состоит в том, чтобы события из другой вкладки вызывали обновление (или что-то еще) на вкладке? – Jarod
Отредактировал мой вопрос, который отвечает на мой вопрос: Спасибо! – Jarod
Да, использование ServerPush - единственный способ обновить пользовательский интерфейс без взаимодействия с пользователем. На сервере он закрывает окно запроса, поэтому да, есть некоторые накладные расходы, а некоторые прокси не любят длительные запросы. Вот почему мы рекомендуем активному SP только тогда, когда это необходимо (например, чтобы показать прогресс для запуска операции и т. Д.) – ralfstx