我有两个关于 ValueChange 侦听器和 Renderresponse 阶段的问题。
valueChangelistener 未反映以下代码中更新的值。
页面 bean 代码:
public void changeListernMethod(ValueChangeEvent e) {
setUpdatedCountry("You selected " + e.getNewValue().toString());
FacesContext.getCurrentInstance().renderResponse();
}
在 valuechange 方法中添加了一行以跳到渲染响应阶段,因为在 PROCESS VALIDATION 阶段调用了 Valuechange 方法,并且 UPDATE MODEL 阶段将覆盖 valuechange 事件方法中设置的任何值。
FacesContext.getCurrentInstance().renderResponse();
但是,当在下拉列表中选择任何值时,文本框不会与所选值一起反映。我知道这与生命周期有关,但无法弄清楚它是什么。
- 在渲染阶段,组件的值从 ManagedPageBean 或组件树(UIViewRoot)中读取并显示在浏览器中???
从 Balusc 帖子 - http://balusc.blogspot.in/2006/09/debug-jsf-lifecycle.html,我在 RenderResponse 中看到“要显示的值是从支持 bean 中的值绑定获取器中检索的”表示这些值是从 bean 中读取的。如果是这样,如何/何时将值更新到 UIRootView 以恢复回发请求的视图。
下面的xhtml代码...
<h:selectOneMenu value="#{changeListenerBean.country}" onchange="submit()"
valueChangeListener="#changeListenerBean.changeListernMethod}" >
<f:selectItems value="#{changeListenerBean.countries}" />
</h:selectOneMenu>
<h:inputText value="#{changeListenerBean.updatedCountry}" />