0

データテーブルに rich:calendar コンポーネントがあります:

 <rich:column id="last_#{row.index}" >
   <rich:calendar id="lcal_#{row.index}"
     value="#{_obj.list[row.index].lastTaught}">
     <a4j:support event="onchanged"
       action="#{_obj.list[row.index].setBooleanDateHasBeenChanged}"
       ajaxSingle="true" reRender="last_#{row.index}" /> 
   </rich:calendar>
 </rich:column>

ユーザーが日付を変更したら、フィールドを true に設定する必要があります (後でデータベース更新のためにどの行が変更されたかを知る必要があります。一度に多数の行を更新したいのです):

 /**
 * when someone changes the last taught field, set has been edited to true
 */
public void resetHasBeenEdited(){
    this.hasBeenEdited = true;
}

日付を変更すると setBooleanDateHasBeenChanged メソッドが呼び出され、バッキング Bean で _obj.list が更新されますが、再レンダリング後に _obj を調べると、hasBeenEdited フィールドに変更が反映されません。

valueChangeListener を使用してみました (一致するようにメソッドの署名を変更しました):

 <rich:column id="last_#{row.index}" >
   <rich:calendar id="lcal_#{row.index}"
     value="#{_obj.list[row.index].lastTaught}"
         valueChangeListener="#{_obj.list[row.index].setBooleanDateHasBeenChanged}">
     <a4j:support event="onchanged"
       ajaxSingle="true" reRender="last_#{row.index}" /> 
   </rich:calendar>
 </rich:column>

しかし、その後 setBooleanDateHasBeenChanged も実行されません。バッキング Bean を更新し、その変更を再レンダリングされた JSF モデルに反映するアクションを取得するにはどうすればよいですか? 私は JSF1.2、RF3.3、および Seam2.2 を使用しています。

4

1 に答える 1

0

さまざまな構成を試してみましたが、最終的に機能したのは ajaxSingle と reRender を取り除くことでした:

 <rich:column id="last_#{status.index}"     
      <rich:calendar value="#{_obj.list[row.index].lastTaught}" >
      <a4j:support event="onchange"
         actionListener="#{_obj.list[row.index].resetTaughtHasBeenEdited()}"/>
    </rich:calendar>
 </rich:column>

reRender アクションは、表示された値を以前の設定にリセットするだけで、ajaxSingle はモデルを更新しません。

于 2013-04-23T15:15:54.027 に答える