2012-03-29 11 views
1

JSF2プロジェクトで問題が発生しました。JSF 2の<h:selectBooleanCheckbox>からイベントが発生しません

私は順番に私のh:dataTableは、チェックボックスh:selectBooleanCheckboxが移入されますページonchange = "submit();"でリフレッシュをtrigersドロップダウンボックスh:selectOneMenuを持っています。

問題は私が得ないことですすべてValueChangeEventイベントのチェックボックスから - 私は最初のドロップダウン選択でチェックボックスがあったのと同じだけ多くのイベントを取得します。例えば:私はドロップダウンリストの値を変更しない

  • 最初のケース:
    • ページが作成され、私の最初のドロップダウンの選択は3つのチェックボックス、つまりテーブル内の3行が生成されます。私はすべてのチェックボックスを選択します。
    • OKボタンを押すと、3 setNodeStateイベントが発生します。
      • ページが作成され、私の最初のドロップダウンの選択は3つのチェックボックス、表内のつまり3行を生成します:
    • 第二の場合は、私は、ドロップダウンリストの値を変更します。
    • 次に、ドロップダウンをクリックして、別のものを選択します。 10 MultiFileSelectMgmtBean.fileNamesがあるので、テーブルには10個のチェックボックスがあります。私はすべてのチェックボックスを選択します。
    • 私がOKを押した後、奇妙な事が起きました:3 setNodeStateイベントが発生しました.10とは思っていませんでした。ここで

xhtmlのコードです:

<tr> 
<td> 
    <h:selectOneMenu 
          value    = "#{MultiFileSelectMgmtBean.selectedLocationId}" 
          valueChangeListener = "#{MultiFileSelectMgmtBean.LocationChangeEvent}" 
          onchange   = "submit();" 
          styleClass   = "text" style="width: 250px;"> 
       <f:selectItems 
          value = "#{MultiFileSelectMgmtBean.locationsListItems}" 
          var = "location" 
          itemValue = "#{location}" 
          itemLabel = "#{location.label}"> 
       </f:selectItems> 
      </h:selectOneMenu> 
</td> 
</tr> 
<tr> 
<td> 
      <h:dataTable value="#{MultiFileSelectMgmtBean.fileNames}" var="filename"> 
        <h:column> 
          <h:selectBooleanCheckbox value    = "#{MultiFileSelectMgmtBean.fileMap[filename]}" 
                valueChangeListener = "#{MultiFileSelectMgmtBean.setNodeState}" 
                title    = "#{filename}" 
                /> 
          <h:outputText value="#{filename}" styleClass="text"/> 
        </h:column> 
     </h:dataTable>   
</td> 
</tr> 
+0

なぜ、あなたが public void newListenerMethod(AjaxBehaviorEventイベント){} – Daniel

+0

をなぜ追加しないのかわかりません。 :-)私はすべてのコードをajaxに転送する準備が整いました。これは古いスタイルで行う必要があります。 – Danijel

+0

jsf2上で、その特典を使用しない理由がない場合は、onchange = "submit();" jsf1にはいいです...代わりに、より良いf:ajaxのレンダリング= "@フォーム" .... – Daniel

答えて

1

問題は、バッキングBean consturctorました。私は常に最初の選択でドロップダウンボックスを初期化していました。その後、そのイベントはそれを他のセレクタに変更します。

今、私はセッションのvarとしてドロップダウンの状態を保存しています。 Beanが作成されると、まずこの状態が保存されたかどうかがチェックされ、存在する場合はロードされます。

関連する問題