【问题标题】:How to refresh stateful pages after a locale change in Wicket 6.0?在 Wicket 6.0 中更改区域设置后如何刷新有状态页面?
【发布时间】:2012-09-30 08:32:21
【问题描述】:

我当前的项目允许用户更改所有页面在每个页面上显示的语言(通过单击一排标志图标中的一个)。以下是链接的实现:

Link<Locale> changeLocaleLink = new Link<Locale>("link", locale) {
    @Override
    public void onClick() {
        Locale newLocale = getModelObject();
        // nothing esoteric done with setLocale(...) in MySession
        MySession session = MySession.get();

        session.setLocale(newLocale);
        if (session.isSignedIn()) {
            // set the new locale in the user's preferences
        }
        setResponsePage(getPage());
    }
};

使用 Wicket 1.5,这没有问题。页面重新加载,所有标签都相应更改。但是,由于我已将代码迁移到 Wicket 6.0,因此在更改区域设置时只有一些(看似随机的)标签会发生变化,所以我不知道是什么导致了这个问题。

我正在为我的所有标签使用 (Wicket-) 标准 ResourceModels 和资源文件。

请注意使用:

setResponsePage(getPage().getClass());

setResponsePage(getPage().getClass(), getPage().getPageParameters());

对我不起作用,因为代码应该适用于所有页面,而且我有很多有状态的、不可标记的页面,它们的构造函数不遵循上述模式。

有人对 Wicket 6.0 有过同样的经历吗?

编辑:似乎Links 的大多数但并非所有标签都受到影响!另外,发生这种情况时,我没有看到任何异常。

EDIT2:由于 svenmeier 的要求,我做了更多的研究。所有未相应更新的链接均按如下方式构造:

BookmarkablePageLink<MyPage> link 
    = new BookmarkablePageLink<MyPage>(ID, MyPage.class, params);
link.setBody(new ResourceModel("My.Internationalized.Text"));

所以看起来被设置为身体模型的模型没有被链接组件更新。这就留下了一个问题,为什么它确实适用于 Wicket 1.5。

【问题讨论】:

  • 向我们展示您是如何构建这些链接的,
  • 我做了更多的研究并添加了您要求的信息。

标签: java internationalization wicket


【解决方案1】:

该问题已在 Wicket 6.1.0 中修复!不幸的是,我不能说是哪个修复完成了这项工作,尽管 WICKET-4738 听起来很像我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多