GWT 超链接异常行为 - 重定向到 http://localhost:8080/#

GWT Hyperlink strange behavior - redirecting to http://localhost:8080/#

好吧,这很奇怪。

我的菜单只有 Hyperlink

Hyperlink eventCalendar= new Hyperlink("Eventkalender", "eventCalendar=" + store.getId());

我正在听 MainViewPresenter 中的 ValueChangeEvent。请注意,我什么都没做。在创建监听器之前,我将 SimplePanel 设置为 ActivityManager:

的显示
App.activityManager.setDisplay(this.mainView.getMainContentContainer());

History.addValueChangeHandler(new ValueChangeHandler<String>() {
    @Override
    public void onValueChange(ValueChangeEvent<String> event) {
        String historyToken = event.getValue();
        GWT.log("onValueChange() historyToken " + historyToken);
    }
});

但是如果我点击 link 会发生什么:

首先,为了眼睛的blink我可以看到浏览器URL改为

http://localhost:8080/#eventCalendar=1

但它立即变回

http://localhost:8080/#

这会导致我的目标网页加载到我声明为显示的 SimplePanel 中(见上文)。

有没有人知道是什么导致了这种行为,因为这对我来说没有意义?为什么 URL 又变了?我使用的 HistoryHyperlink 错了吗?

很可能你的 PlaceHistoryMapper returns null 用于 eventCalendar=1 令牌,所以它被替换为 默认位置 你给了PlaceHistoryHandler。如果您使用基于 PlaceTokenizers 的 GWT.create() 和工厂 and/or @WithTokenizers,这意味着您没有 PlaceTokenizer 用于空-string 前缀 (@Prefix("")),或者那个分词器 returns null.

话虽如此,您可能更愿意尝试直接使用地点,而不是浏览 历史。这意味着在某些小部件上使用 ClickHandler 并在适当的位置调用 PlaceController#goTo。理想情况下,该小部件将是一个 Anchor,其 href 是根据给定位置的 PlaceHistoryMappergetToken 结果计算得出的(href 实际上看起来取决于你的 Historian;如果你坚持默认行为,那么只需在返回的标记前加上一个 #