我想知道为什么<f:facet>
存在以及与仅设置属性或声明子组件相比它有什么好处。
例如,<h:dataTable>
有许多方便的属性,例如headerClass
,captionClass
,footerClass
等。为什么可以,例如页眉和页脚内容只能通过<f:facet>
设置,而不是通过例如headerValue
或footerValue
属性?或者作为儿童成分?
答案 0 :(得分:3)
例如,在dataTable中,我们有许多用于设置标题(页脚,标题...)css样式的属性,为什么不只是为该值添加属性(比如说例如headerValue)? / em>的
因为您无法将JSF组件设置为属性的值。考虑一下:
<h:dataTable ... header="<h:outputLabel value="Search"><h:inputText ... />">
这只会导致无效的XML。
是的,它可以被转义:
<h:dataTable ... header="<h:outputLabel value="Search"><h:inputText ... />">
但这需要重新解析属性值作为JSF组件树的一部分,以使其真正起作用。然后它理想地在视图构建期间发生。 JSF没有这方面的设施。它简直笨拙并摧毁了JSF的哲学。而且,它很难看,也很难维持痛苦。
或者,为什么不将标题(页脚,...)作为dataTable的子组件?
这正是<f:facet>
所做的。 <h:dataTable>
组件应该如何知道您最终要将哪些组件作为页眉或页脚?