如何在场所处理无效的GWT令牌

时间:2016-01-02 12:11:21

标签: gwt gwt-activities gwt-places

在“联系人”项目中,如果用户输入了无效令牌以进行联系人编辑,则应该如何处理,例如,而不是#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 个答案:

答案 0 :(得分:0)

试试这个:

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

在您已经告诉活动离开新地点之后,您正尝试执行代码(return false) - 即完成此活动并开始新活动。