rich: компонент обновления календаря после редактирования компонента

У меня есть богатый: календарь компонент в DataTable:

 <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 и обновляется _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 даже не запускается. Как получить действие по обновлению компонента поддержки и отразить это изменение в переоцененной модели JSF? Я использую JSF1.2, RF3.3 и Seam2.2.

1 ответ

Решение

Я перепробовал несколько разных конфигураций, но в итоге получилось избавиться от 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 не будет обновлять модель.

Другие вопросы по тегам