メソッド引数として渡すか (環境が 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 に a によって自動的に設定させることもできますが@ManagedProperty("#{param.language}")
、これには Bean がリクエスト スコープである必要があります。または、ViewParam と @ManagedProperty(value = "#{param.id}")<f:viewParam>
も参照してください)
ビューからコントローラーにパラメーターを渡すには十分な方法です。好きなのを選びな。は<h:inputHidden>
、JSF コンテキストで多少異なる目的を果たしますonclick
。これは、醜い JavaScript によってのみ操作できます。