Как обрабатывать недействительный токен GWT местами

В проекте Контакты, если пользователь ввел недопустимый токен для редактирования контакта, как с этим быть, например, вместо #contactId:12 ввел #contactId:abc. Или в другом приложении, возможно, по соображениям безопасности (например, для авторизации) у пользователя нет необходимых прав на редактирование объекта, как сообщить пользователю. Я пытался перейти к такому месту, как InvalidUrlPlace, но не могу. Я не могу перемещаться изнутри метода Activity.start(), используя placeController.goTo()

обновление1:

@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;
}

обновление2:

<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 "";
        }
    }
}


person Askar    schedule 02.01.2016    source источник
comment
Вы можете перемещаться куда угодно из Activity.start(), используя placeController.goTo(). Покажи свой код.   -  person Andrei Volgin    schedule 02.01.2016
comment
Спасибо за ответ, я обновил сообщение   -  person Askar    schedule 02.01.2016
comment
Решено Ответ на проблему the-activity-start-method#answers-header">здесь   -  person Askar    schedule 03.01.2016


Ответы (1)


Попробуй это:

@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus)
{
    if (place.isValid())
    {
        containerWidget.setWidget(view);
        initialize();
    }
    else
    {
        placeController.goTo(new InvalidUrlPlace());
    }
}

Вы пытаетесь выполнить код (return false) после того, как уже сказали активности уйти в новое место, т.е. завершить эту активность и начать новую.

person Andrei Volgin    schedule 03.01.2016
comment
спасибо, этот код сработал, но URL-адрес (токен) не обновлен до токена InvalidUrlPlace и по-прежнему имеет старый токен. - person Askar; 03.01.2016
comment
Вы получаете какие-либо ошибки? Между прочим, это должен быть InvalidUrlPlace(), если только вы не добавили новый конструктор в Place. - person Andrei Volgin; 03.01.2016
comment
Я использую InvalidUrlPlace как обычное место, и это сработало полностью, но если перейти из метода start(), эта проблема возникает, также из текущего действия, не может перейти к тому же действию с другим токеном. - person Askar; 03.01.2016
comment
InvalidUrlPlace имеет два конструктора, если я использую конструктор по умолчанию, результат не меняется, я обновляю сообщение и добавляю код InvalidUrlPlace, также если я использую OtherPlace, который работает нормально, вместо InvalidUrlPlace, я не могу перемещаться по нему изнутри метода start() правильно и URL не обновляется, еще раз спасибо - person Askar; 03.01.2016
comment
Place не имеет конструктора без аргументов. Вы, вероятно, должны сделать: `public InvalidUrlPlace() {super();} То же самое с другим конструктором, который вы используете. - person Andrei Volgin; 03.01.2016
comment
com.google.gwt.place.shared.Place не имеет конструктора - person Askar; 03.01.2016
comment
Мой плохой - это абстрактный класс. Видите ли вы какие-либо ошибки (например, исключения) в инструментах вашего браузера? - person Andrei Volgin; 03.01.2016
comment
Нет, я использую IntelliJ IDEA и инструменты разработчика Chrome, я не знаю, что именно здесь не так? - person Askar; 03.01.2016