单击h:selectOneMenu调用操作方法

时间:2013-09-13 13:32:36

标签: 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启动一些方法。我怎样才能实现它?

3 个答案:

答案 0 :(得分:18)

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

托管bean中的valueChangeListener方法是:

public void valueChanged(ValueChangeEvent event) {
    //do your stuff
}

答案 1 :(得分:4)

作为基本JSF工具包的一部分,您可以使用<f:ajax/>标记提交(使用ajax)您的输入,而无需完整页面提交/刷新。使用您的代码示例

  1. <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>
    
  2. 在您的支持bean中定义一个方法(在此示例中为doSomething()),该方法接受AjaxBehaviorEvent的实例

    public void doSomething(AjaxBehaviorEvent abe){
      //do what you want with your favCoffee3 variable here
    }
    
  3. 进一步阅读:

答案 2 :(得分:1)

似乎适用于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 uri="http://richfaces.org/a4j" prefix="a4j"%>