JSF + Seamでロケールを変更するための最も一般的なアプローチの1つ-<h:selectOneMenu>
を使用:
<h:form action="#{localeSelector.select}" rendered="false">
<h:selectOneMenu value="#{localeSelector.language}" onchange="submit()">
<f:selectItem itemLabel="English" itemValue="en" />
<f:selectItem itemLabel="Francais" itemValue="fr" />
</h:selectOneMenu>
</h:form>
ボタンでロケールの変更を実装したい。したがって、問題は、パラメータ(en、frなど)を渡してBeanを<h:commandButton>
で更新する方法です。たぶん<h:inputHidden>
が役に立ちますか?
メソッド引数として渡す(ご使用の環境がEL 2.2をサポートしている場合のみ)、
_<h:commandButton value="English" action="#{localeSelector.change('en')}" />
<h:commandButton value="Deutsch" action="#{localeSelector.change('de')}" />
<h:commandButton value="Français" action="#{localeSelector.change('fr')}" />
_
と
_public void change(String language) {
locale = new Locale(language);
// ...
}
_
または、_<f:setPropertyActionListener>
_を使用します
_<h:commandButton value="English" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="en" />
</h:commandButton>
<h:commandButton value="Deutsch" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="de" />
</h:commandButton>
<h:commandButton value="Français" action="#{localeSelector.change}">
<f:setPropertyActionListener target="#{localeSelector.language}" value="fr" />
</h:commandButton>
_
と
_private String language;
public void change() {
locale = new Locale(language);
// ...
}
_
または、_<f:param>
_を使用します
_<h:commandButton value="English" action="#{localeSelector.change}">
<f:param name="language" value="en" />
</h:commandButton>
<h:commandButton value="Deutsch" action="#{localeSelector.change}">
<f:param name="language" value="de" />
</h:commandButton>
<h:commandButton value="Français" action="#{localeSelector.change}">
<f:param name="language" value="fr" />
</h:commandButton>
_
と
_public void change() {
locale = new Locale(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("language"));
// ...
}
_
(JSFに@ManagedProperty("#{param.language}")
で自動的に設定させることもできますが、これにはBeanをリクエストスコープにするか、_<f:viewParam>
_が必要です。--も参照してください。 ViewParam vs @ManagedProperty(value = "#{param.id}") )
ビューからコントローラーにパラメーターを渡すのに十分な方法。好きなのを選びな。 _<h:inputHidden>
_は、JSFコンテキストでは多少異なる目的を果たし、醜いonclick
内のJavaScriptでのみ操作できます。