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 не будет обновлять модель.