如何在 JSF 中创建现有组件的组合?
Posted
技术标签:
【中文标题】如何在 JSF 中创建现有组件的组合?【英文标题】:How to create a composite of existing components in JSF? 【发布时间】:2011-07-10 07:41:24 【问题描述】:我想知道是否可以编写自己的组件(或称其为 Widget、Object)。
我的意思是,不要(例如)在其中使用h:panelGroup
和h: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 文件名是标签名。
也就是说,复合组件具有性能影响,只有在使用简单的包含或标记文件无法实现功能要求时才应使用它们。在您的特定情况下,您最好使用标记文件。只有当您真正需要 <cc:interface componentType="...">
时,复合组件才有价值。
另见:
When to use <ui:include>, tag files, composite components and/or custom components? Our composite component wiki page JSFhttp://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 中创建自定义验证器