Gwt 为什么my History.newItem(someToken)没有在ValueChange()上激发?

Gwt 为什么my History.newItem(someToken)没有在ValueChange()上激发?,gwt,token,browser-history,gwt-2.4,Gwt,Token,Browser History,Gwt 2.4,即使在我使用History.fireCurrentHistoryState()时正确地触发了它 编辑:同一软件包中的所有类。代码更新- TestHistory.java Deposit.java 撤回.java //与deposit.java类似尽管newItem(…)通常会触发事件,但如果当前令牌与您尝试添加的令牌相同,则该事件是不可操作的。如果不是这样,则说明您的实现存在问题。问题在于History.newItem()的使用。当我使用带书签的url并使用新标记调用History.newIte

即使在我使用
History.fireCurrentHistoryState()时正确地触发了它

编辑:同一软件包中的所有类。代码更新-

TestHistory.java Deposit.java 撤回.java
//与deposit.java类似

尽管
newItem(…)
通常会触发事件,但如果当前令牌与您尝试添加的令牌相同,则该事件是不可操作的。如果不是这样,则说明您的实现存在问题。

问题在于History.newItem()的使用。当我使用带书签的url并使用新标记调用History.newItem()时,问题发生了。因为同一个内部页面已经存在一个令牌,而我给了它一个新的令牌,所以出现了一些混乱,并且没有调用onValueChange()

现在我很清楚,当当前视图没有附加令牌时,应该使用History.newItem()来用令牌标记视图。通常,当用户正常打开站点(没有令牌)时,我们应该使用history.newItem来标记第一个视图

另外值得注意的是,History.fireCurrentHistoryState()只使用当前令牌调用onValueChange。通过查看GWT的代码,我发现History.newItem()只调用History.fireCurrentHistoryState()

事实上如果我替换

if(!startToken.isEmpty())
            History.newItem(startToken);
        History.fireCurrentHistoryState();
在我的代码中

   if(startToken.isEmpty())
            History.newItem("login");
        else
            History.fireCurrentHistoryState();
&还有代码

if(hasTypedSomeToken) {
                        //History.back(); //send him to the URL(token) he bookmarked b4 loggin in
                        History.newItem("login",false);
                        History.back();
                        System.out.println(History.getToken());
                    }


它工作得很好。

请提供代码来演示如何实现它。我更新了代码。我正在手动更改令牌,方法是将其键入URL并输入。不输入同一标记两次。还使用Chrome在html文件&am中设置了历史iframe。
if(!startToken.isEmpty())
            History.newItem(startToken);
        History.fireCurrentHistoryState();
   if(startToken.isEmpty())
            History.newItem("login");
        else
            History.fireCurrentHistoryState();
if(hasTypedSomeToken) {
                        //History.back(); //send him to the URL(token) he bookmarked b4 loggin in
                        History.newItem("login",false);
                        History.back();
                        System.out.println(History.getToken());
                    }
if(hasTypedSomeToken) {
                    History.fireCurrentHistoryState();
                    System.out.println("getToken() in Login =   "+History.getToken());
                }