我有以下下拉列表:
<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 启动一些方法。我怎样才能实现它?
您可以使用valueChangeListener
属性,指向托管bean 中的方法并submit()
在onchange
属性中添加a。
表格应如下所示:
<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
}
作为基本 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>
在你的支持 bean 中定义一个方法(doSomething()
在这个例子中),它接受一个AjaxBehaviorEvent
public void doSomething(AjaxBehaviorEvent abe){
//do what you want with your favCoffee3 variable here
}
进一步阅读:
似乎适用于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"%>