0

我在数据表中有一个丰富的日历组件:

 <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(我需要知道稍后为 db update 更改了哪些行,我想一次更新一堆行):

 /**
 * 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 回答