我有一个使用 ajax 更新 selectOneList 的 selectOneRadio:
<h:outputLabel for="categ" value="Category" />
<h:selectOneRadio id="categ" value="#{cdManager.store.cd.categ}" required="true">
<f:selectItems value="#{cdManager.store.cd.categs}"/>
<f:ajax execute="categ" render="subcategs" listener="#{cdManager.categChanged}" />
</h:selectOneRadio>
<h:outputLabel for="subcategs" value="Sub-categ"/>
<h:selectOneListbox id="subcategs" value="#{cdManager.store.cd.subcateg}" required="true">
<f:selectItems value="#{cdManager.subcategsArray}"/>
</h:selectOneListbox>
当页面出现时,我的会话 bean 创建一个新的(空的)CD 对象。当用户填写所有信息并提交时,(现在已填写)CD 对象被保存,工作正常。
问题是当用户更改收音机(没有提交)时正在设置“类别”属性,这很糟糕,因为用户可以单击“后退浏览器”,当他们回来时,收音机将被选中,而另一个字段将是空的,非常糟糕的行为!
我怎样才能解决这个问题并仍然使用 ajax?
这是监听器代码:
public void categChanged()
{
//store.cd.categ is alredy set ? WHYYY ?
String categ = store.getCd().getCateg();
this.subcategsArray = store.getCd().getSubcateg(categ);
}
我正在使用 JSF 2.0、NetBeans IDE 7.0.1 和 Glassfish 3.1,任何帮助都会很棒,谢谢!