如何在 JSF 中创建现有组件的组合?

Posted

技术标签:

【中文标题】如何在 JSF 中创建现有组件的组合?【英文标题】:How to create a composite of existing components in JSF? 【发布时间】:2011-07-10 07:41:24 【问题描述】:

我想知道是否可以编写自己的组件(或称其为 Widget、Object)。

我的意思是,不要(例如)在其中使用h:panelGrouph:outputLabel,而是自己创建h:panelMarkzzz,作为panelGroup 和outputLabel 的组合。

在 JSF 上可以吗?

【问题讨论】:

【参考方案1】:

是的,可以像这样创建现有组件的组合。

启动示例:

/resources/foo/group.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:cc="http://xmlns.jcp.org/jsf/composite">
    <cc:interface>
        <cc:attribute name="label" type="java.lang.String" required="true" />
    </cc:interface>
    <cc:implementation>
         <h:panelGroup>
             <h:outputLabel value="#cc.attrs.label" />
             <cc:insertChildren />
         </h:panelGroup>
    </cc:implementation>
</html>

/test.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://xmlns.jcp.org/jsf/html" 
    xmlns:foo="http://xmlns.jcp.org/jsf/composite/foo">
    <h:head>
        <title>Test</title>
    </h:head>
    <h:body>
        <foo:group label="Label value">
            <h:outputText value="This will appear after label inside the panelgroup" />
        </foo:group>
    </h:body>
</html>

/foo 文件夹名称随您的喜好而定,您可以在 XML 命名空间中将其引用为 http://xmlns.jcp.org/jsf/composite/XXX。 XHTML 文件名是标签名。

也就是说,复合组件具有性能影响,只有在使用简单的包含或标记文件无法实现功能要求时才应使用它们。在您的特定情况下,您最好使用标记文件。只有当您真正需要 &lt;cc:interface componentType="..."&gt; 时,复合组件才有价值。

另见:

When to use <ui:include>, tag files, composite components and/or custom components? Our composite component wiki page JSF http://xmlns.jcp.org/jsf/composite tag documentation Java EE 7 tutorial - Composite components Java EE 7 tutorial - Advanced composite components

【讨论】:

【参考方案2】:

也许你的意思是Composite Components?

【讨论】:

以上是关于如何在 JSF 中创建现有组件的组合?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 中执行验证,如何在 JSF 中创建自定义验证器

如果用户需要向现有选项添加新选项,如何在访问中创建一个组合框,该组合框可以转换为文本框以启用书写?

如何在 JSF EL 中创建一个数组?

如何在 JSF 组件中监控异步/后台线程状态并获取通知

如何在 jsf 中创建用户友好和 seo 友好的 url?

如何在 JSF 2.0 中创建自定义 404 消息?