我有两个关于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();
但是,如果在下拉列表中选择了任何值,则文本框不会反映所选值。我知道这与生命周期有关,但无法弄清楚它是什么。
从BaluSc post-http://balusc.blogspot.in/2006/09/debug-jsf-lifecycle.html,我看到RenderResponse中的“要显示的值是从支持bean中的值绑定getter中检索的”,这意味着从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}" />