我有一个分层模型,显示在嵌套表格中:
root (root bean)
+- property1 (property of root)
+- children (collection of child beans)
+- property2 (property of child)
+- subchildren (collection of subchild beans)
+- property3 (property of subchild)
我正在我的整个模型上运行自定义验证,即在以下路径中向FacesMessages
添加FacesContext
:
FacesMessages
可以绑定在每个级别(根bean,属性和集合中的bean)。
托管bean myBean
正在保存正在编辑的模型的根bean。
要编辑此模型,我正在使用类似的东西(简化为极端以展示我遇到的问题):
<h:form id="root">
<h:messages for="root">
<h:inputText value="#{myBean.root.property1}" id="property1" />
<h:messages for="property1">
<h:dataTable value="#{myBean.root.children}" var="child" id="children">
<f:facet name="header">children</f:facet>
<h:column>
<f:facet name="header">*</f:facet>
<h:messages for="children" />
</h:column>
<h:column>
<f:facet name="header">property2</f:facet>
<h:inputText value="#{child.property2}" id="property2" />
<h:messages for="property2">
</h:column>
<h:column>
<f:facet name="header">subchildren</f:facet>
<h:dataTable value="#{child.subchildren}" var="subchild" id="subchildren">
...
</h:dataTable>
</h:column>
</h:dataTable>
</h:form>
为简单起见,表(*)的第一列用于显示当前行bean的验证消息(因此,在bean级别,如root:children:0,而不是其属性)。
使用标准的html taglib(h:dataTable
)时,一切正常,我可以在每个级别看到验证消息。
但是当我尝试使用primefaces表(p:dataTable/p:column/p:messages
)而不是(h:dataTable/h:column/h:messages
)时,我看不到集合中bean的验证消息:
可以很好地显示链接到这些bean属性的消息:
如果我使用ui:repeat
而不是h:dataTable
重写我的标记,那么一切都有效,所以我认为这个问题出现在主要问题中。
也许我推动的事情有点太过分了,所有事情都与ui:repeat
和h:dataTable
一起运气,但是我想让它与primefaces一起工作,因为我想使用{{1} }。
我能做些什么才能让它发挥作用,还是在主要面孔中是 bug ?
感谢您阅读我的问题 召唤BalusC JSF上帝的咒语到此为止! : - )