我目前正在经历一种奇怪的现象,其中在执行valueChangeListener之前将值设置为模型.
基本上我想要发生的是:
但是当我运行它时会发生什么,顺序是1 - 3 - 2 - 4(不是我认为的1 - 2 - 3 - 4)
这是UI的一部分:
<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>
Run Code Online (Sandbox Code Playgroud)
这是豆子的摘录:
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;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
searching with this.budget == xxxx
setting budget : yyyy
Run Code Online (Sandbox Code Playgroud)
我想要的是,首先从UI中选择的新值设置预算,然后开始基于新UI进行搜索.但我不知道如何实现这一目标.
我使用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>
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么?
谢谢 !
Bal*_*usC 15
将valueChangeListener在验证阶段执行,之前的更新模型值阶段.据intented能够得到的手柄既新旧值,以便在必要时可以根据该做点生意的东西(日志?)真正的变化.在JSF 1.x中,这是比不过常(AB)用于调用只有一个下拉变化的行动更多,但它以组合形式使用onchange="submit()",immediate="true",FacesContext#renderResponse()和其他东西.选择的值将通过ValueChangeEvent#getNewValue()(ValueChangeEvent应该被定义为方法的参数)来获得.
对于JSF 2.x valueChangeListener,在这种情况下你不再需要了.无论如何,你对旧的价值也不感兴趣.使用相反的listener属性<f:ajax>.
<f:ajax listener="#{bean.actionSearch}" />
Run Code Online (Sandbox Code Playgroud)
这将在" 更新模型值"阶段之后的"调用操作"阶段执行.
| 归档时间: |
|
| 查看次数: |
13944 次 |
| 最近记录: |