rich:组件编辑后的日历更新辅助bean

时间:2013-04-19 18:26:36

标签: jsf richfaces seam

我在数据表中有一个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(我需要知道以后为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,但是当我在rerender之后检查_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。

1 个答案:

答案 0 :(得分: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不会更新模型。