JSF通过Facelets提供复合组件(有点类似于Widget
)的概念。复合组件是一种特殊类型的模板,它充当应用程序中的一个组成部分。
复合组件由标记标签和其他现有组件组成。 这个可重复使用的用户创建的组件具有定制的定义功能,并且可以像任何其他组件一样具有连接到它的验证器,转换器和监听器。 包含标记标签和其他组件的任何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 实现。 |
在下面的例子中,我们分析一个接受用户名和电子邮件地址作为输入的组合组件。
实例
打开NetBeans IDE创建一个名称为:CompositeComponents 的Web工程,其完整的目录结构如下所示 -
创建复合组件
在创建组合组件之前,请确保使用正确的命名空间,如下所示。
xmlns:composite="http://xmlns.jcp.org/jsf/composite"
创建一个文件:composite-component.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>
<h2>In composite-component.xhtml Form</h2>
<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
组件的值。 ccs是JSF中复合组件的保留字。 表达式#{cc.attrs.attribute-name}
用于访问为组合组件界面定义的属性。
上述代码作为名为composite-component.xhtml
的文件存储在应用程序Web根目录的 resources/com
文件夹中。
使用复合组件
使用复合组件的网页通常称为使用页面。 使用页面包含对xml
命名空间声明中复合组件的引用,如下所示:
<html 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 />
</h:form>
</body>
</html>
运行项目后,在网页上将看到以下用户界面 -