4

私のアプリケーションはいくつかの部分で構成されています。1 つの小さな GWT の場所を除いて、すべてのアプリケーションで URL を変更することにより、ユーザーがロケールを変更できないようにしたいと考えています。その場所が正しい言語で読み込まれるように、URL でその場所にロケールを提供する必要があります。

私に何ができる?

次のオプションが表示されます。

1) その場所から別のモジュールを作成し、そのモジュールの xml 設定ファイルでロケールのソースとして queryparam を使用できるようにします。私が理解している限り、 <set-configuration-property name="locale.searchorder" value="queryparam,cookie"/> おそらくうまくいくだろうが、そのような小さなタスクには少し難しいようなものを書き留める必要があります。

2) 別のオプションは、必要な機能を手動で実装することです。私は次のコードを書きました:

String languageCode = Window.Location.getParameter("lang");
Cookies.setCookie(COOKIE_NAME, languageCode, new Date(System.currentTimeMillis() * 1000 * 3600 * 24 * 365 * 100));
Scheduler.get().scheduleDeferred(new ScheduledCommand()
{
    @Override
    public void execute()
    {
        Window.Location.reload();
    }
});

それは機能しますが、問題は遅延呼び出しにあります。それを使用すると、ページが読み込まれ、リロード信号が来て、ページが表示された後にリロードが開始されます。ユーザーは奇妙な点滅を観察します。遅延呼び出しを使用しないと、Cookie が設定されないため、理由がわかりません (これについて説明していただけますか? )。

では、このタスクをどのように解決しますか?

4

2 に答える 2

0

上記の回答は正しいですが、特定のケースについてさらに情報を追加したいと思います。

Spring-security を使用していて、ログイン後にロケールを設定する必要がある場合 (質問のタイトルに「onLoad」という単語が含まれているためと思われます)、AuthenticationSuccessHandler を実装できます。

つまり MyAuthenticationSuccessService.java で

@Override
  public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
      Authentication authentication) throws IOException, ServletException {
    String userName = authentication.getName();
    // ... retrieve user info
    String locale = userInfo.getLocale();

    response.sendRedirect("/MyGwtModule.html?locale="+locale+"#HomePlace:");
  }

そして春の設定で

<form-login login-page="/login" authentication-failure-url="/loginfailed"
            authentication-success-handler-ref="myAuthenticationSuccessService" />
于 2013-09-09T10:12:52.353 に答える