web-dev-qa-db-ja.com

h:selectOneMenuのクリック時にアクションメソッドを呼び出す

次のドロップダウンリストがあります。

<h:selectOneMenu value="#{user.favCoffee3}"  onclick="">
   <f:selectItems value="#{user.favCoffee3Value}" var="c"
   itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
</h:selectOneMenu>

ドロップダウンリスト項目をクリックして、Beanからメソッドを起動したいと思います。どうすれば達成できますか?

15
user2459256

マネージドBeanのメソッドを指し示すvalueChangeListener属性を使用して、onchange属性にsubmit()を追加できます。

フォームは次のようになります。

</h:form>
    <h:selectOneMenu valueChangeListener="#{bean.valueChanged}" 
                     onchange="submit()">
        <f:selectItem itemValue="1" itemLabel="First" />
        <f:selectItem itemValue="2" itemLabel="Second" />
    </h:selectOneMenu>
</h:form>

マネージドBeanのvalueChangeListenerメソッドは次のようになります。

public void valueChanged(ValueChangeEvent event) {
    //do your stuff
}
20

基本的なJSFツールキットの一部として、_<f:ajax/>_タグを使用して、ページ全体を送信/更新する必要なく入力を送信(ajaxを使用)できます。コードサンプルの使用

  1. _<f:ajax/>_タグをドロップダウンメニューの子として定義します

    _<h:selectOneMenu value="#{user.favCoffee3}"  onclick="">
       <f:selectItems value="#{user.favCoffee3Value}" var="c" itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
       <f:ajax listener="#{user.doSomething}"/>
    </h:selectOneMenu>
    _
  2. AjaxBehaviorEventのインスタンスを受け入れるメソッドをバッキングBeanで定義します(この例ではdoSomething())。

    _public void doSomething(AjaxBehaviorEvent abe){
      //do what you want with your favCoffee3 variable here
    }
    _

参考文献:

4
kolossus

a4j:support で動作するようです。きみの h:selectOneMenuは次のようになります。

<h:selectOneMenu value="#{user.favCoffee3}">
    <f:selectItems value="#{user.favCoffee3Value}" var="c" itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
    <a4j:support event="onchange" action="#{user.onSelectOneMenuChange}">
</h:selectOneMenu>

また、次のtaglibを追加する必要があります。

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
1
ssantos