に、私は次のタグが含まれていないメッセージ・バンドル:JSF 2.0 - hの切り替えロケール:のcommandLink - 私のXHTMLページで同期
:私は言語Beanを実装した<f:view locale="#{languageBean.locale}">
...
</f:view>
@ManagedBean(name = "languageBean")
@SessionScoped
public class LanguageBean implements Serializable {
private static final long serialVersionUID = -4260383661321467037L;
...
private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
public String switchToDE() {
LOGGER.info("switching to german");
Locale german = Locale.GERMAN;
FacesContext.getCurrentInstance().getViewRoot().setLocale(german);
this.locale = german;
return null;
}
public String switchToEN() {
LOGGER.info("switching to english");
Locale english = Locale.ENGLISH;
FacesContext.getCurrentInstance().getViewRoot().setLocale(english);
this.locale = english;
return null;
}
public Locale getLocale() {
return locale;
}
public void setLocale(final Locale locale) {
this.locale = locale;
}
}
その後、私は、ロケールを切り替えるcommandLinksをレンダリングしたい:
私が設定している私の顔-config.xmlに#{msg['message.key.1']
:今
<locale-config>
<default-locale>de</default-locale>
<supported-locale>de</supported-locale>
<supported-locale>en</supported-locale>
</locale-config>
私のページでいくつかの場所では
<ul>
<li>
<h:form>
<h:commandLink class="" action="#{languageBean.switchToDE}">Deutsch</h:commandLink>
</h:form>
</li>
<li>
<h:form>
<h:commandLink action="#{languageBean.switchToEN}">English</h:commandLink>
</h:form>
</li>
</ul>
私は、メッセージをレンダリングするいくつかの出力を持っています私の問題:最初のクリックは、スイッチロケールメソッドにアクセスしますが、メッセージバンドルはページ内で更新されません。同じ言語でもう一度クリックすると、メッセージバンドルが更新されます。メッセージバンドルの検索は、常にロケールの切り替えの一歩です。 h:commandButtonタグでロケールを切り替えるにはどうすればいいですか(リンクが必要ですが、スタイルガイドではorを使用できません)、メッセージバンドルのルックアップが同期していますか?
Mojarra 2.0.9(Servlet API 2.5に基づくJSF 2.0)でGF 2.1を使用しています。 アドバイスをよろしくお願いいたします。
EDIT:
:[OK]を、私はそれは私のせいな原因は、我々はいくつかの「特別」なもの;-)
は、私たちが持っているものと我々がしようと何を説明しようと試みるだったことが判明
- 我々は、ビルドtiの中にSVNレポ
- に異なるビジネス上の目的のために、論理的に異なるWebアプリケーションを分離しているのmaven
- で私たちのソフトウェアを構築しています私たちは<ビジネス-webappの-ID > .xmlファイルが
- を登録直面-CONFIG-各Webアプリケーションは、それ自身のリソースを持っているので、私たちはそれぞれのビジネスのためのWebアプリケーションaを目的としている
- 1(WAR-オーバーレイ)にすべてのWebアプリケーションを集約します各ウェブ
- 登録されているすべてのWebアプリケーションのために、我々はナビゲーション項目をレンダリングする一般的なWebアプリケーション(フレームワーク)を持っている名前「<ビジネス-webappの-ID > MSG」
- に登録バンドルのnav-アイテムを登録する可能性があります。
- フレームワークは現在、現在のナビゲーションアイテムが返される段階で、すべてのリソースバンドルを1つの大きなリソースバンドルに集約しようとします。
ナビゲーションBeanのメソッドgetItems()が、switchLocaleメソッドがトリガされる前に呼び出され、ロケールの切り替えが遅すぎることがわかりました。
これで、h:commandLinkを使用してロケールを切り替えたり、ah:outputLinkを使用してロケールを切り替える可能性があるかどうかを尋ねてみると、「getItems()」のバッキングBeanメソッドを使用する前にロケールの切り替えが行われますトリガー?
わかりやすいように私の「挑戦」を説明してくれることを願っています。
と
、あなたは言語を切り替えるには、AJAXを使用しませんでしたか?一方を除外するには、リダイレクトしたり、null以外を返すとどうなりますか? (空の文字列など) – BalusC
ロケールの切り替えにajaxを使用しません。そして、私はロケールの切り替えがすべてのページで可能でなければならないため、この時点で正確な結果を知らないのでnullを返します。 JSFバッキングBeanでどのようにリダイレクトできますか? – Walter
JSFに強制的に新しいビューを作成させるか、 'return viewRoot.getViewId()+"?faces-redirect = true ";'を 'return null;'の代わりに 'return"同じビューにリダイレクトします。 – BalusC