Вызов ajax-обновления из функции loadEvents ScheduleModel в Primefaces не работает - PullRequest
0 голосов
/ 25 октября 2019

Вызов обновления 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". Все последующие вызовы игнорируются.

...