#java #gwt
#java #gwt
Вопрос:
Итак, я делаю что-то вроде этого:
public class SecureActivity extends AbstractActivity {
public void start(AcceptsOneWidget container, EventBus eventBus) {
if (!_app.isUserLoggedIn()) {
_app.goTo(new LoginPlace(_app.getCurrentPlaceToken()))
} else {
// do cool secure stuff
}
}
}
Но поведение, которое я вижу, заключается в том, что история моего браузера относится к исходному URL (из исходного запроса), затем login:redirectPlace, а затем снова к исходному url.
Похоже, мне нужно выполнить перенаправление после завершения метода start(). Есть ли правильный способ отложить / делегировать это goTo, чтобы оно происходило вне метода запуска?
Спасибо.
Комментарии:
1. Ответ Томаса — один из способов обойти это. Возможно, вы захотите немного подумать о том, как ваши места сопоставляются с действиями, потому что, если ваша активность сразу перенаправляется на новое место при ее запуске, вы помещаете токен в историю пользователя, который не будет иметь для них смысла. Вместо этого вы могли бы вставить свое условие if (!_app.isUserLoggedIn()) в свой ActivityMapper и запустить LoginActivity вместо запуска SecureActivity, а затем поменять места, чтобы перейти к LoginActivity. (т. Е. Вам не всегда нужно сопоставлять места с действиями 1 к 1).
2. Бен, это отличное предложение. Я думал о сопоставлении 1 к 1. В частности, я настраивал SecureActivity на выполнение роли проверки авторизации. Если я перемещу это в mapper, после успешного входа в систему, использую ли я places для повторной попытки перехода в исходное место? Или мне вручную вызывать вызовы моего картографа, чтобы запустить это действие?
3. Это хороший вопрос! О чем я забыл, так это о том, что вы не можете goTo() место, в котором вы уже находитесь, так что вы правы, вам придется вручную запускать новое действие (что кажется не совсем правильным). Это, вероятно, заслуживает отдельного вопроса; возможно, команда GWT подскажет, что делать.
Ответ №1:
Этого должно быть достаточно:
Scheduler.get().scheduleFinally(new ScheduledCommand() {
@Override
public void execute() {
_app.goTo(new LoginPlace(_app.getCurrentPlaceToken());
}
}