私の現在のプロジェクトでは、ユーザーはすべてのページが各ページに表示される言語を変更できます (フラグ アイコンの行のいずれかをクリックすることによって)。リンクの実装は次のとおりです。
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-) standardResourceModel
とリソース ファイルを使用しています。
以下を使用することに注意してください。
setResponsePage(getPage().getClass());
と
setResponsePage(getPage().getClass(), getPage().getPageParameters());
コードはすべてのページで機能するはずであり、コンストラクターが上記のパターンに従わないステートフルでブックマークできないページがかなりあるため、私には機能しません。
Wicket 6.0 で同じことを経験した人はいますか?
編集: s のすべてのラベルが影響を受けるわけではありませんが、ほとんどのようLink
です! また、これが発生したときに例外がスローされることはありません。
EDIT2: svenmeier のリクエストにより、さらに調査を行いました。それに応じて更新されないすべてのリンクは、次のように構成されます。
BookmarkablePageLink<MyPage> link
= new BookmarkablePageLink<MyPage>(ID, MyPage.class, params);
link.setBody(new ResourceModel("My.Internationalized.Text"));
そのため、ボディモデルとして設定されているモデルがリンクコンポーネントによって更新されていないようです。なぜそれが Wicket 1.5 で機能したのかという疑問が残ります。