如何在位置中处理无效的GWT令牌

如何在位置中处理无效的GWT令牌,gwt,gwt-activities,gwt-places,Gwt,Gwt Activities,Gwt Places,在Contacts项目中,如果用户为联系人编辑输入了无效的令牌,那么应该如何处理它,例如,输入的不是#contactId:12,而是#contactId:abc。或者在另一个应用程序中,可能出于安全原因(如授权),用户没有编辑对象所需的权限,如何通知用户。我试图导航到一个地方,例如InvalidUrlPlace,但无法导航。 我无法使用placeController.goTo() 更新1: @Override public void start(AcceptsOneWidget containe

在Contacts项目中,如果用户为联系人编辑输入了无效的令牌,那么应该如何处理它,例如,输入的不是
#contactId:12
,而是
#contactId:abc
。或者在另一个应用程序中,可能出于安全原因(如授权),用户没有编辑对象所需的权限,如何通知用户。我试图导航到一个地方,例如
InvalidUrlPlace
,但无法导航。 我无法使用
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 "";
        }
    }
}

公共类InvalidUrlPlace扩展了Place
{
私有消息Messages=GWT.create(Messages.class);
私有InvalidToken InvalidToken;
公共残疾人场所()
{
}
公共InvalidUrlPlace(InvalidToken InvalidToken)
{
this.invalidToken=invalidToken;
}
public InvalidToken getInvalidToken()
{
返回invalidToken;
}
公共字符串getMessage()
{
if(invalidToken!=null)
返回invalidToken.getMessage();
返回消息。pageNotFound();
}
@前缀(“invalidUrl”)
公共静态类标记器实现PlaceTokenizer
{
@凌驾
public InvalidUrlPlace getPlace(字符串标记)
{
返回新的InvalidUrlPlace();
}
@凌驾
公共字符串getToken(InvalidUrlPlace)
{
返回“”;
}
}
}
试试这个:

@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus)
{
    if (place.isValid())
    {
        containerWidget.setWidget(view);
        initialize();
    }
    else
    {
        placeController.goTo(new InvalidUrlPlace());
    }
}
在您已告知活动离开到新地点后,您正在尝试执行代码(
返回false
),即完成此活动并开始新的活动。

尝试以下操作:

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

在您已告知活动离开到新地点后,您正在尝试执行代码(
返回false
),即完成此活动并开始新的活动。

您可以使用placeController.goTo()从activity.start()导航到您喜欢的任何位置。显示您的代码。感谢您的回复,我更新了消息解决了回答的问题您可以使用placeController.goTo()从Activity.start()导航到任何您喜欢的地方。显示您的代码。感谢您的回复,我更新了消息解决了问题回答了谢谢,此代码工作,但url(令牌)未更新为InvalidUrlPlace令牌,并且仍然具有旧令牌。您是否收到任何错误?顺便说一句,它应该是InvalidUrlPlace(“”),除非您在
Place
中添加了一个新的构造函数。我使用InvalidUrlPlace作为常规位置,它完全有效,但是如果从start()方法导航,同样从当前活动引发的问题,无法使用其他标记导航到同一活动InvalidUrlPlace有两个构造函数,如果我使用默认构造函数,结果不会更改,我会更新消息并添加InvalidUrlPlace代码,如果我使用工作正常的OtherPlace,而不是InvalidUrlPlace,我无法从start()方法内部正确导航,并且url不会更新,感谢againPlace没有无参数构造函数。您可能应该这样做:`public InvalidUrlPlace(){super(“”;}与您使用的另一个构造函数相同。谢谢,这段代码工作了,但是url(令牌)没有更新为InvalidUrlPlace令牌,并且仍然有旧的令牌。您收到任何错误吗?顺便说一句,它应该是InvalidUrlPlace(“”),除非您在
Place
中添加了一个新的构造函数。我使用InvalidUrlPlace作为常规位置,它完全有效,但是如果从start()方法导航,同样从当前活动引发的问题,无法使用其他标记导航到同一活动InvalidUrlPlace有两个构造函数,如果我使用默认构造函数,结果不会更改,我会更新消息并添加InvalidUrlPlace代码,如果我使用工作正常的OtherPlace,而不是InvalidUrlPlace,我无法从start()方法内部正确导航,并且url不会更新,感谢againPlace没有无参数构造函数。您可能应该这样做:`public InvalidUrlPlace(){super(“”;}与您使用的其他构造函数相同。