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