0

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 を使用しています。

4

1 に答える 1