Вызов обновления ajax из сессионного компонента функционировал правильно, как и ожидалось. Однако, если эта же функция вызывается изнутри функции LoadEvent ScheduleModel из Primeface Schedule (FullCalendar), обновление ajax ничего не делает.
Я использую Primeface 7.0, glassfish 4.1.2 и Java 8
Код компонента:
@Named
@SessionScoped
public class TestBean implements Serializable {
...
private int test
private TestLazyScheduleModel scheduleModel = new TestLazyScheduleModel();
...
public int getTest() {
return this.test;
}
public TestLazyScheduleModel getSchedule() {
return scheduleModel;
}
public void updateTest() {
this.test++;
PrimeFaces pf = PrimeFaces.current();
if (pf.isAjaxRequest()) {
pf.ajax().update("testPanel");
}
private class TestLazyScheduleModel extends LazyScheduleModel {
private static final long serialVersionUID = 1L;
@Override
public void loadEvents(Date start, Date end) {
TestBean.this.updateTest();
}
}
Код HTML:
<pf:commandButton value="test" actionListener="#{testBean.updateTest()}" />
<pf:schedule id="testcalendar" value="#{testBean.schedule}" widgetVar="testcalendar" timeZone="#{testBean.timeZone}" locale="# {testBean.locale}">
</pf:schedule>
<pf:outputPanel id="testPanel">
<pf:outputLabel value="#{testBean.test}" />
</pf:outputPanel>
При нажатии кнопки CommandPanel обновляется, как и ожидалось. Когда вызывается loadEvents, testPanel не обновляется и getTest () никогда не вызывается. Отладка показала, что pf.ajax (). Update («testPanel») вызывается в обоих случаях. В журнале или на консоли не появилось ни кода ошибки, ни исключений.
** Обновление: я обнаружил, что первый вызов обновления изнутри loadEvents привел к исключению ComponentNotFoundException: Невозможно найти компонент для выражения "testPanel", на который ссылаются из"j_id1". Все последующие вызовы игнорируются.