Jsp 添加呈现/禁用属性时未激发valueChangeListener
我有以下和平的准则:Jsp 添加呈现/禁用属性时未激发valueChangeListener,jsp,jsf,Jsp,Jsf,我有以下和平的准则: <h:selectOneMenu id="countrycode" styleClass="Width300" value="#{customer.countrycode}" valueChangeListener="#{customer.countrycodechange}" onchange="submit()"
<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>
任何帮助都将不胜感激 只有在提交表单期间,
呈现的
和禁用的
属性分别评估为真
和假
时,才会处理输入组件。因此,您需要确保#{customer.validcountry}
在表单提交期间的计算结果与在显示表单期间的计算结果相同。显然,在您的情况下,bean是请求范围的,或者isValidcountry()
依赖于请求范围的参数,该参数在表单提交期间没有正确保留。您需要确保在表单提交期间保留相同的条件
在JSF2.0中,这将是将bean放在视图范围而不是请求范围中的问题。然而,看到您的valuechangeenner
hack,我认为您仍然在使用JSF1.x,它还没有视图范围。如果没有看到代码的其余部分,就很难提出正确的解决方案。在输入组件本身应该选择一个有效的国家时,在“Isa valid country?”上有一个呈现属性至少对我来说没有意义
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))
{
...