Facelets 中 ui:composition 和 ui:decorate 的区别
Posted
技术标签:
【中文标题】Facelets 中 ui:composition 和 ui:decorate 的区别【英文标题】:Difference between ui:composition and ui:decorate in Facelets 【发布时间】:2012-10-17 00:20:36 【问题描述】:Facelets 中的ui:composition
和ui:decorate
有什么区别?两者似乎都支持 ui:define
作为子标签。在什么情况下你会使用这些?
【问题讨论】:
【参考方案1】:<ui:composition>
标签之外的任何内容都将被忽略。 <ui:decorate>
并非如此,因此作为“模板中的模板”是有益的。
通过查看以下答案中的一些真实示例,可能会更好地理解其意义:
What is the real conceptual difference between ui:decorate and ui:include? Is it possible to use template with composite component in JSF 2? Is there a way to run a JSF page without building the whole project?【讨论】:
你所说的“模板中的模板”是什么意思?你也可以举一些人为的例子来展示 ui:decorate 对 ui:composition 的强大吗? 您可以将<ui:decorate>
嵌套在另一个<ui:composition>
甚至<ui:decorate>
中。 <ui:composition>
并非如此,因为它忽略/忽略/删除标签之外的任何内容。给定的链接包含详细的真实世界示例。【参考方案2】:
正如文档所说:http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/ui/decorate.html 装饰器标签与组合相同,唯一的区别是 ui:decorate 不会忽略标签之外的所有内容,这在您想要制作页面区域或部分的模板。
例如,当您想要制作应用程序的一般外观模板时,ui:composition 很有用。由于它删除了标签之外的内容,因此模板属性真正定义了应用程序区域的总体外观。
使用装饰标签,由于标签外的内容不会被删除,您可以制作内容区域内的部分的模板。
一个例子可以是使用组合模板来定义页眉、菜单、页脚和内容部分。
然后在内容部分中,您可以在制作表单时使用装饰器标签,然后使所有表单具有相同的外观(例如标题、组件区域和按钮区域)。
【讨论】:
以上是关于Facelets 中 ui:composition 和 ui:decorate 的区别的主要内容,如果未能解决你的问题,请参考以下文章
将 EL 方法表达式作为自定义 Facelets 标记文件的属性传递
Win 10 应用开发UI Composition 札记:动画
Win 10 应用开发UI Composition 札记:视图框架的实现