Предварительные условия:
Настройка:
- 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 решает проблему
- Удаление элемента из диалога устраняет проблему
- Позже значение устанавливается снова, когда не может быть определенолибо