使用<f:facet>代替属性或子组件</f:facet>

时间:2015-01-04 20:35:40

标签: jsf jsf-2 children facets

我想知道为什么<f:facet>存在以及与仅设置属性或声明子组件相比它有什么好处。

例如,<h:dataTable>有许多方便的属性,例如headerClasscaptionClassfooterClass等。为什么可以,例如页眉和页脚内容只能通过<f:facet>设置,而不是通过例如headerValuefooterValue属性?或者作为儿童成分?

1 个答案:

答案 0 :(得分:3)

  

例如,在dataTable中,我们有许多用于设置标题(页脚,标题...)css样式的属性,为什么不只是为该值添加属性(比如说例如headerValue)? / em>的

因为您无法将JSF组件设置为属性的值。考虑一下:

<h:dataTable ... header="<h:outputLabel value="Search"><h:inputText ... />">

这只会导致无效的XML。

是的,它可以被转义:

<h:dataTable ... header="&lt;h:outputLabel value=&quot;Search&quot;&gt;&lt;h:inputText ... /&gt;">

但这需要重新解析属性值作为JSF组件树的一部分,以使其真正起作用。然后它理想地在视图构建期间发生。 JSF没有这方面的设施。它简直笨拙并摧毁了JSF的哲学。而且,它很难看,也很难维持痛苦。


  

或者,为什么不将标题(页脚,...)作为dataTable的子组件?

这正是<f:facet>所做的。 <h:dataTable>组件应该如何知道您最终要将哪些组件作为页眉或页脚?