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 オブジェクトが保存され、正常に動作します。
問題は、ユーザーがラジオを (送信せずに) 変更したときに「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、Glassfish 3.1 で NetBeans IDE 7.0.1 を使用しています。