模板文件和复合组件只是为了方便最终用户,因为它们易于编写和使用。基本的 JSF 实现(f:
和h:
组件)和像PrimeFaces这样的组件库使用完全值得的 UI 组件。那是扩展 JSF类的UIComponent
类。
类的开发UIComponent
相对复杂和笨拙。开发时需要考虑很多事情,比如编写标签文件(你必须在一个 XML 文件中定义每个属性),配置文件(链接组件和渲染器)等等,但是您最终会得到一个更加模块化和可重用的模型以及更高的效率。它们甚至可以用于普通的旧 JSP 文件。
Facelets 模板与未编译为 Java 类的 JSP 文件不同。它们只是由本身已经用 Java 编写的 SAX (XML) 解析器加载和执行。
根据评论更新:如果涉及的业务/条件逻辑相对较多且与视图无关,例如基于非用户的一堆等标签<c:if>
,它通常会表现得更好-<c:choose>
受控输入。
JSF 2.0 The Complete Reference一书还在第 10 章“非复合组件”中介绍了自定义 UIComponent 开发。Java EE 5 教程也涵盖了它,但它针对的是 JSF 1.2。不幸的是,它不在 JSF 2 的Java EE 6 教程中,虽然技术没有改变,但有几个新的注解是您需要了解的。