I think the problem is that you set your Backing Bean Scope to Request. Try to
change it to Session and you'll see it saves the states of your DropDownLists
after submitting the page. Here is a very simple code I use in my projects. As I
mentioned the BackingBean has Sessio scope:
<h:selectOneMenu binding="#{editExpertAddressInfoBackingBean.province}"
style="width: 160px"
valueChangeListener="#{editExpertAddressInfoBackingBean.provinceChanged}"
onchange="submit();">
<f:selectItem itemValue="" itemLabel="" />
<f:selectItems value="#{editExpertAddressInfoBackingBean.provinceItems}"/>
</h:selectOneMenu>
<h:selectOneMenu binding="#{editExpertAddressInfoBackingBean.city}"
style="width: 160px">
<f:selectItem itemValue="" itemLabel=""/>
<f:selectItems value="#{editExpertAddressInfoBackingBean.cityItems}"/>
</h:selectOneMenu>
public void provinceChanged(ValueChangeEvent e) throws AbortProcessingException
{
if (province.getValue() != null &&
!"".equals(String.valueOf(province.getValue()))){
Long id = Long.valueOf(String.valueOf(province.getValue()));
cityItems = loadCities(id);
} else{
cityItems.clear();
}
}