对话框中的PF日历会使UiComponent#visitTree

时间:2019-09-25 07:53:24

标签: jsf primefaces

先决条件:

  • xmlns:p =“ http://primefaces.org/ui”
  • javax.faces.component.UIComponent

设置:

  • org.primefaces:primefaces:jar:6.1.2
  • org.glassfish:javax.faces:jar:2.2.14
  • Tomcat 8.5.28
  • 专有OR映射器
@Property
private Calendar cal;
public Calendar getCal() {
  return ORMapper.getProperty(this, "cal");
}

功能设置:
p:commandButton,在其操作期间执行代码(导致错误),然后打开一个包含以下内容的对话框

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

执行:
在调用命令按钮(操作)的应用程序期间,我们使用

遍历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(不是getter)

注意:

  • 使用IntelliJ尝试在哪里进行更改:字段访问/修改断点,获取/设置断点的调用,EL方法调用程序断点
  • 删除visitTree调用可解决问题
  • 从对话中删除元素可以解决问题
  • 以后也无法确定该值时,再次设置该值

0 个答案:

没有答案
相关问题