Календарь PF в диалоге обнуляет свойство Java в UiComponent # visitTree - PullRequest
0 голосов
/ 25 сентября 2019

Предварительные условия:

Настройка:

  • org.primefaces: простые лица: jar: 6.1.2
  • org.glassfish: javax.faces: jar: 2.2.14
  • Tomcat 8.5.28
  • Собственное ИЛИMapper
@Property
private Calendar cal;
public Calendar getCal() {
  return ORMapper.getProperty(this, "cal");
}

Функциональная настройка:
p: commandButton, которая во время своего действия выполняет код (который приводит к ошибке), а затем открывает диалог, который содержит

<p:calendar id="cal" value="#{bean.model.cal}" />

Выполнение:
Во время применения приложения команды buttonButton (действие) мы пересекаем раздел дерева DOM, который НЕ содержит диалог (то есть этот диалог не является дочерним элементом компонента), используя

component.visitTree(
  VisitContext.createVisitContext(
    FacesContext.getCurrentInstance(), 
    null, 
    Collections.singleton(VisitHint.SKIP_UNRENDERED)),
  (context, component) -> {
    ...
    return VisitResult.ACCEPT;
  }
);

Перед выполнением дерева
model.cal = значение
model.getCal () = значение

Поведение с ошибками:
После выполнения дерева
model.cal = null
model.getCal () = значение

Это приводит к ошибке при проверке модели, которая имеет нарушение, например, @NotNull в свойстве (не получатель)

Примечания:

  • Использование попыток IntelliJ, где были сделаны попытки найти изменение: точки доступа к полям доступа / модификации, вызовы точек доступа для получения / установки, ELТочки останова метода Invoker
  • Удаление вызова visitTree решает проблему
  • Удаление элемента из диалога устраняет проблему
  • Позже значение устанавливается снова, когда не может быть определенолибо
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...