次のドロップダウンリストがあります。
<h:selectOneMenu value="#{user.favCoffee3}" onclick="">
<f:selectItems value="#{user.favCoffee3Value}" var="c"
itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
</h:selectOneMenu>
ドロップダウンリスト項目をクリックして、Beanからメソッドを起動したいと思います。どうすれば達成できますか?
マネージド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
}
基本的なJSFツールキットの一部として、_<f:ajax/>
_タグを使用して、ページ全体を送信/更新する必要なく入力を送信(ajaxを使用)できます。コードサンプルの使用
_<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>
_
AjaxBehaviorEvent
のインスタンスを受け入れるメソッドをバッキングBeanで定義します(この例ではdoSomething()
)。
_public void doSomething(AjaxBehaviorEvent abe){
//do what you want with your favCoffee3 variable here
}
_
参考文献:
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"%>