JSF复合组件

JSF复合组件

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>

运行项目后,在网页上将看到以下用户界面 -