JSF 自定义复合组件与自定义经典组件有啥区别

Posted

技术标签:

【中文标题】JSF 自定义复合组件与自定义经典组件有啥区别【英文标题】:Whats the difference between JSF Custom Composite Components vs Custom Classic ComponentsJSF 自定义复合组件与自定义经典组件有什么区别 【发布时间】:2012-10-02 13:22:03 【问题描述】:

我想构建一个自定义 JSF 组件。现在我从 oracle 阅读了一些文档并看到了一些代码示例。问题是我有点困惑:

似乎有两种方法可以使用 JSF 2.0+ 构建自定义组件。据我所知,自 JSF 2.0 以来,我可以使用这些复合组件来构建我自己的组件。

但是与“经典”组件相比,它们有什么缺点吗?

当我使用 Compisite 组件时,我的组件会变得相当复杂,我是否会丢失任何东西(除了向下兼容性)?

例如,我的组件将在 java 中完成一些工作,复合组件可以做到这一点吗?

【问题讨论】:

【参考方案1】:

如果您想通过纯 XML 方式将一堆密切相关的现有标签/组件/html 表示为单个且可重用的组件,则复合组件很有用。

当没有没有标准 JSF 标记/组件可用于实现需求时,自定义组件将是唯一的方法。例如。 <input type="file"><input type="range"> 等。请注意,这样的自定义组件可以在需要时反过来用于复合。

完全有道理,对吧?

您可以创建一个所谓的“支持组件”类扩展UINamingContainer(或至少实现NamingContainer)并通过<cc:interface componentType> 将其绑定到组合。 You can find several examples in my answers here.

但请注意,有时复合组件不适合,您需要创建一个标记文件。例如,当您想要自定义且可重复使用的<h:column>

另见:

When to use <ui:include>, tag files, composite components and/or custom components?

【讨论】:

以上是关于JSF 自定义复合组件与自定义经典组件有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.0 复合组件 - ajax 渲染参数 OUTSIDE 组件定义

创建vue组件与自定义一个vue组件时的区别

何时使用 <ui:include>、标记文件、复合组件和/或自定义组件?

用户控件、自定义控件和组件有啥区别?

在自定义组件上使用时 v-model 和 .sync 有啥区别

部署 JSF 复合组件以供共享使用