Как обрабатывать недействительный токен GWT местами
В проекте "Контакты", если пользователь ввел недопустимый токен для редактирования контакта, как, например, его обрабатывать вместо #contactId:12
, поступил #contactId:abc
, Или в другом приложении, может быть, по соображениям безопасности (например, авторизация), у пользователя нет необходимых прав для редактирования объекта, как сообщить пользователю. Я пытался перейти в такое место, как InvalidUrlPlace
но не могу. Я не могу ориентироваться изнутри Activity.start()
метод, используя placeController.goTo()
update1:
@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus)
{
GWT.log("inside start() method");
if (assertValidPlace())
{
containerWidget.setWidget(view);
initialize();
}
}
protected boolean assertValidPlace()
{
if (!place.isValid())
{
GWT.log("going to InvalidUrlPlace");
placeController.goTo(new InvalidUrlPlace());
return false;
}
return true;
}
Update2:
<code>
public class InvalidUrlPlace extends Place
{
private Messages messages = GWT.create(Messages.class);
private InvalidToken invalidToken;
public InvalidUrlPlace()
{
}
public InvalidUrlPlace(InvalidToken invalidToken)
{
this.invalidToken = invalidToken;
}
public InvalidToken getInvalidToken()
{
return invalidToken;
}
public String getMessage()
{
if (invalidToken != null)
return invalidToken.getMessage();
return messages.pageNotFound();
}
@Prefix("invalidUrl")
public static class Tokenizer implements PlaceTokenizer<InvalidUrlPlace>
{
@Override
public InvalidUrlPlace getPlace(String token)
{
return new InvalidUrlPlace();
}
@Override
public String getToken(InvalidUrlPlace place)
{
return "";
}
}
}
1 ответ
Попробуй это:
@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus)
{
if (place.isValid())
{
containerWidget.setWidget(view);
initialize();
}
else
{
placeController.goTo(new InvalidUrlPlace());
}
}
Вы пытаетесь выполнить код (return false
) после того, как вы уже сказали занятию уйти на новое место - то есть закончить это занятие и начать новое.