Вызвать метод действия при нажатии h: selectOneMenu
У меня есть следующий выпадающий список:
<h:selectOneMenu value="#{user.favCoffee3}" onclick="">
<f:selectItems value="#{user.favCoffee3Value}" var="c"
itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" />
</h:selectOneMenu>
Я хотел бы запустить некоторый метод из элемента bean с помощью выпадающего списка. Как я могу это достичь?
Ответы
Ответ 1
Вы можете использовать атрибут valueChangeListener
, указывающий на метод в управляемом компоненте, и добавить submit()
в атрибут [onchange
.
Форма должна выглядеть следующим образом:
<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>
И метод valueChangeListener
в управляемом компоненте будет следующим:
public void valueChanged(ValueChangeEvent event) {
//do your stuff
}
Ответ 2
Как часть основного инструментария 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>
-
Определите метод (doSomething()
в этом примере) в вашей поддержке bean, который принимает экземпляр AjaxBehaviorEvent
public void doSomething(AjaxBehaviorEvent abe){
//do what you want with your favCoffee3 variable here
}
Дальнейшее чтение:
Ответ 3
Кажется, работает для a4j: поддержка. Ваш 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"%>