Вызвать метод действия при нажатии 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"%>