selectOneMenu上的valueChangeListener和ajax执行顺序问题

|| 我目前遇到一种奇怪的现象,即在执行valueChangeListener之前将值设置为模型。 基本上我想发生的是: 我改变选择菜单 使用Ajax提交新值以更新myBean(使用f:ajax) 根据新提交的值执行查询(使用valueChangeListener) 根据上一次查询的结果呈现表 但是,当我按此顺序运行时会发生什么,即1-3-2-4(不是我想象的1-2-3-4) 这是用户界面的一部分:
<h:selectOneMenu label=\"budget\" id=\"budget\"
    converter=\"genericConverter\"
    value=\"#{myBean.budget}\" 
    valueChangeListener=\"#{myBean.actionSearch}\">

    <f:ajax render=\"myGrid\" />
    <f:selectItem itemLabel=\"Choose one ..\" noSelectionOption=\"true\" />

    <f:selectItems ... />
</h:selectOneMenu>
这是摘自bean的摘录:
public void actionSearch() {
    System.out.println(\"searching with this.budget == \" + this.budget);
    ...
}
public void setBudget(String budget) {
    System.out.println(\"setting budget : \" + budget);
    this.budget = budget;
}
这是输出:
searching with this.budget == xxxx
setting budget : yyyy
我想要的是,首先根据用户界面中选择的新值设置预算,然后根据新用户界面开始搜索。但是我不知道该怎么实现。 即时通讯与这些一起使用Tomcat 7:
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>
我想知道我做错了什么吗? 谢谢 !     
已邀请:
valueChangeListener
在“验证模型”阶段执行,在“更新模型值”阶段之前执行。旨在能够同时处理旧值和新值,以便您在必要时可以根据实际更改进行一些业务工作(记录?)。然而,在JSF 1.x中,这种用法通常仅用于对下拉更改进行调用,而不是经常用于,但必须与
onchange=\"submit()\"
immediate=\"true\"
FacesContext#renderResponse()
和其他内容结合使用。所选值将由
ValueChangeEvent#getNewValue()
获得(
ValueChangeEvent
应定义为方法的参数)。 对于JSF 2.x,在这种情况下,您不再需要
valueChangeListener
。无论如何,您也不会对旧值感兴趣。请改用
<f:ajax>
listener
属性。
<f:ajax listener=\"#{bean.actionSearch}\" />
这将在“更新模型值”阶段之后的“调用操作”阶段中执行。     

要回复问题请先登录注册