我当前的项目允许用户更改所有页面在每个页面上显示的语言(通过单击一排标志图标中的一个)。这是链接的实现:
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,因此在更改区域设置时只有一些(看似随机的)标签会发生变化,所以我不知道是什么导致了问题。
我正在ResourceModel
为我的所有标签使用 (Wicket-)standard 和资源文件。
请注意,使用:
setResponsePage(getPage().getClass());
和
setResponsePage(getPage().getClass(), getPage().getPageParameters());
对我不起作用,因为代码应该适用于所有页面,而且我有很多有状态的、不可标记的页面,它们的构造函数不遵循上述模式。
有人对 Wicket 6.0 有过同样的经历吗?
编辑:似乎大多数,但不是所有的Link
s 标签都受到影响!此外,我没有看到发生这种情况时抛出任何异常。
EDIT2:由于 svenmeier 的要求,我做了更多的研究。所有未相应更新的链接的构造如下:
BookmarkablePageLink<MyPage> link
= new BookmarkablePageLink<MyPage>(ID, MyPage.class, params);
link.setBody(new ResourceModel("My.Internationalized.Text"));
因此,链接组件似乎没有更新设置为主体模型的模型。这就留下了一个问题,为什么它确实适用于 Wicket 1.5。