1

私の現在のプロジェクトでは、ユーザーはすべてのページが各ページに表示される言語を変更できます (フラグ アイコンの行のいずれかをクリックすることによって)。リンクの実装は次のとおりです。

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 で機能したのかという疑問が残ります。

4

1 に答える 1

0

この問題はWicket6.1.0で修正されました。残念ながら、どの修正がうまくいったかはわかりませんが、WICKET-4738は私の問題によく似ています。

于 2012-10-05T15:58:29.287 に答える