Jsf 单击h:SelectOne菜单时调用操作方法

Jsf 单击h:SelectOne菜单时调用操作方法,jsf,action,selectonemenu,Jsf,Action,Selectonemenu,我有以下下拉列表: <h:selectOneMenu value="#{user.favCoffee3}" onclick=""> <f:selectItems value="#{user.favCoffee3Value}" var="c" itemLabel="#{c.coffeeLabel}" itemValue="#{c.coffeeValue}" /> </h:selectOneMenu> 我想通过单击下拉列表项从bean启动一些方

我有以下下拉列表:

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

我想通过单击下拉列表项从bean启动一些方法。我怎样才能做到这一点呢?

似乎对我有用。您的
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 uri="http://richfaces.org/a4j" prefix="a4j"%>

您可以使用
valueChangeListener
属性,指向托管bean中的方法,并在
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>

作为基本JSF工具包的一部分,您可以使用
标记(使用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>
    
  • 进一步阅读:


    您至少应该提到,您的答案要求OP了解RichfacesGood的新依赖关系。谢谢!:)我想使用它来处理items值,但是当我更改它并使用代码б时,它会显示与items关联的bean字段的previos值,我用它解决了这个问题
    <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>
    
    public void doSomething(AjaxBehaviorEvent abe){
      //do what you want with your favCoffee3 variable here
    }