我有以下代码和平:
<h:selectOneMenu id="countrycode"
styleClass="Width300"
value="#{customer.countrycode}"
valueChangeListener="#{customer.countrycodechange}"
onchange="submit()"
immediate="true"
rendered="#{customer.validcountry}">
<f:selectItem itemValue="None"
itemLabel="-------Select a Country------" />
<f:selectItem itemValue="AU" itemLabel="Australia" />
<f:selectItem itemValue="NZ" itemLabel="New Zealand" />
</h:selectOneMenu>
ValueChangeListener仅在我遗漏渲染属性时才有效,渲染属性countrycodechange
永远不会被触发!有没有解决的办法?
添加disabled
属性也是如此,这会阻止valueChangeListener
触发。我的valueChangeListener
backbean有:
public void countrycodechange (ValueChangeEvent vce) {
PhaseId phaseId = vce.getPhaseId();
if (phaseId.equals(PhaseId.ANY_PHASE))
{
vce.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
vce.queue();
}
else if (phaseId.equals(PhaseId.UPDATE_MODEL_VALUES))
{
...
任何帮助将不胜感激。
答案 0 :(得分:2)
输入组件只有在{/ 1}}和rendered
属性分别评估为disabled
和true
表单提交时才会被处理。因此,您需要确保false
在表单提交期间对其进行评估,就像在显示表单时一样。显然,在您的情况下,bean是请求作用域,或者#{customer.validcountry}
依赖于请求作用域参数,该参数在表单提交期间未正确保留。您需要确保在表单提交期间保留相同的条件。
在JSF 2.0中,将bean放在视图范围而不是请求范围中。但是,看到你的isValidcountry()
hack,我认为你还在使用没有视图范围的JSF 1.x.如果没有看到其余的代码,很难提出正确的解决方案。在“是一个有效的国家/地区?”上有一个渲染属性对我来说至少没有意义吗?而输入组件本身应该选择一个有效的国家。