<h:form id="forma">
<h:outputText value="Please select a country:" />
<h:selectOneRadio value="#{Regions.country}" valueChangeListener="#{Regions.updateCountry}" immediate="false" onclick="submit()">
<f:selectItem itemLabel="USA" itemValue="USA" />
<f:selectItem itemLabel="CANADA" itemValue="CANADA" />
<!-- <a:support event="onchange" reRender="regionPanel" />-->
</h:selectOneRadio>
</h:form>
<h:form id="formb">
<a:outputPanel id="regionPanel">
<s:decorate id="regionDecoration" template="layout/display.xhtml">
<ui:define name="label">Select a region:</ui:define>
<h:selectOneMenu id="selectRegion" value="#{dealerList.region}" >
<!-- <rich:comboBox id="selectRegion" value="#{dealerList.region}"-->
<!-- converter="SelectItemConverter">-->
<f:selectItems value="#{Regions.regionItems}" />
<!-- </rich:comboBox>-->
</h:selectOneMenu>
</s:decorate>
</a:outputPanel>
上面的代码通过点击selectoneradio来决定selectonemenu显示美国州或加拿大省份。显示正常,但是selectonemenu的值传不到backing bean,出现 value is not valid 错误。 原来以为是a4j的问题,后来改用valuechangelistener来动态更新selectonemenu的selectitems.故障依旧。
今天在想为什么动态设定selectitems才会有问题呢?在页面第一次显示时将所有items全部加入selectitems,再试,OK!
原来动态更新selectitems并没有更新selectonemenu,导致JSF在selectonemenu查找不到相应的值。
下一步打算将selectonemenu绑定到backingbean,彻底解决这个问题。