本文概述
JSF提供了带有Facelets的复合组件的概念。复合组件是一种特殊类型的模板, 在你的应用程序中充当组件。
复合组件由标记标签和其他现有组件组成。这个可重用的, 用户创建的组件具有自定义的定义功能, 并且可以像其他任何组件一样将验证器, 转换器和侦听器连接到该组件。包含标记标签和其他组件的任何XHTML页面都可以转换为复合组件。
下表包含复合标签。
标签 | 功能 |
---|---|
composite:interface | 用于声明复合组件的使用合同。复合组件可以用作单个组件, 其功能集是使用合同中声明的功能的并集。 |
composite:implementation | 它用于定义复合组件的实现。如果出现Composite:interface元素, 则必须有一个相应的Composite:implementation。 |
composite:attribute | 它用于声明一个属性, 该属性可以提供给声明此标记的复合组件的实例。 |
composite:insertChildren | 它用于在使用页面中插入复合组件标签内的子组件。 |
composite:valueHolder | 它用于声明其组件由嵌套此元素的Composite:interface声明其合同的复合组件公开了ValueHolder的实现, 该实现适合用作使用页面中附加对象的目标。 |
composite:editableValueHolder | 它用于声明其合同由嵌套此元素的Composite:Interface声明的复合组件公开适合于用作使用页面中附加对象目标的EditableValueHolder的实现。 |
composite:actionSource | 它用于声明其组件由嵌套此元素的Composite:interface声明其合同的复合组件公开适合于用作使用页面中附加对象目标的ActionSource实现。 |
在下面的示例中, 我们将创建一个复合组件, 该组件接受用户名和电子邮件地址作为输入。
创建复合组件
在创建复合组件之前, 请确保使用下面给出的正确名称空间。
xmlns:composite="http://xmlns.jcp.org/jsf/composite"
//composite-component-example.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:composite="http://xmlns.jcp.org/jsf/composite"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>Composite Component Example</title>
</h:head>
<h:body>
<composite:interface>
<composite:attribute name="username" required="false"/>
<composite:attribute name="email" required="false"/>
</composite:interface>
<composite:implementation>
<h:outputLabel value="User Name " />
<h:inputText value="#{cc.attrs.username}"/><br/>
<h:outputLabel value="Email ID "/>
<h:inputText value="#{cc.attrs.email}"/><br/>
</composite:implementation>
</h:body>
</html>
在上面的示例中, Composite:interface标记用于声明可配置的值。 Composite:implementation标签用于声明所有XHTML标记标签, 而cc.attrs.username用于定义inputText组件的值。 ccis是JSF中复合组件的保留字。表达式#{cc.attrs.attribute-name}用于访问为复合组件的界面定义的属性。
上面的代码作为名为Composite-component-example.xhtml的文件存储在应用程序Web根目录内名为resources / com的文件夹中。
使用复合组件
使用复合组件的网页通常称为使用页面。使用页面在xml名称空间声明中包含对复合组件的引用, 如下所示:
xmlns:co="http://xmlns.jcp.org/jsf/composite/com">
在这里, com是存储文件的文件夹, 而co是用于访问组件的引用。
// index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:co="http://xmlns.jcp.org/jsf/composite/com">
<h:head>
<title>Implementing Composite Component</title>
</h:head>
<body>
<h:form>
<co:composite-component-example />
</h:form>
</body>
</html>
运行项目后, 我们在网页上获得以下用户界面。
评论前必须登录!
注册