我有一个selectOneRadio,使用ajax:
更新selectOneList<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对象,该工作正常。
问题是当用户更改收音机时正在设置'categ'属性(提交时) 这是不好的,因为用户可以点击“后退浏览器”,当他们回来时,收音机将被选中,其他字段将被清空,非常糟糕的行为!
我如何解决这个问题仍然使用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,任何帮助都会很棒,谢谢!
答案 0 :(得分:1)
问题是当用户设置'categ'属性时 更改收音机(不提交)
这是ajax的重点。
如果您使用浏览器的后退按钮,您将在浏览器缓存中看到一个页面。你可以disable caching of your page。然后,您将从服务器获得一个带有新支持bean的新页面(如果它是请求或视图作用域)或检查categChanged()
方法中是否存在其他字段。