web-dev-qa-db-ja.com

h:commandButtonと一緒にパラメーターを渡す方法

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>が役に立ちますか?

11
Serga

メソッド引数として渡す(ご使用の環境が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でのみ操作できます。

27
BalusC