JSF通過Facelets提供復(fù)合組件(有點(diǎn)類似于Widget
)的概念。復(fù)合組件是一種特殊類型的模板,它充當(dāng)應(yīng)用程序中的一個(gè)組成部分。
復(fù)合組件由標(biāo)記標(biāo)簽和其他現(xiàn)有組件組成。 這個(gè)可重復(fù)使用的用戶創(chuàng)建的組件具有定制的定義功能,并且可以像任何其他組件一樣具有連接到它的驗(yàn)證器,轉(zhuǎn)換器和監(jiān)聽器。 包含標(biāo)記標(biāo)簽和其他組件的任何XHTML頁面都可以轉(zhuǎn)換為復(fù)合組件。
以下表格包含復(fù)合標(biāo)簽以及說明 -
標(biāo)簽 | 功能 |
---|---|
composite:interface |
它用于聲明復(fù)合組件的約定。 組合組件可以用作單個(gè)組件,其特征集合是使用合同中聲明的功能的并集。 |
composite:implementation |
它用于定義復(fù)合組件的實(shí)現(xiàn)。 如果composite:interface 元素存在,必須有一個(gè)相應(yīng)的composite:implementation 。 |
composite:attribute |
它用于聲明一個(gè)屬性,該屬性可以被賦予該標(biāo)簽被聲明的復(fù)合組件的一個(gè)實(shí)例。 |
composite:insertChildren |
它用于在使用頁面中的復(fù)合組件標(biāo)簽中插入子組件。 |
composite:valueHolder |
它用于聲明由該元素嵌套的composite:interface 聲明其合同的組合組件暴露了適用于使用頁面中附加對(duì)象目標(biāo)的ValueHolder 實(shí)現(xiàn)。 |
composite:editableValueHolder |
它用于聲明由該元素嵌套的composite:interface 聲明其合同的組合組件暴露了適用于使用頁面中附加對(duì)象目標(biāo)的EditableValueHolder 的實(shí)現(xiàn)。 |
composite:actionSource |
它用于聲明由該元素嵌套的composite:interface 聲明其約定的組合組件,暴露了適用于使用頁面中附加對(duì)象目標(biāo)的ActionSource 實(shí)現(xiàn)。 |
在下面的例子中,我們分析一個(gè)接受用戶名和電子郵件地址作為輸入的組合組件。
打開NetBeans IDE創(chuàng)建一個(gè)名稱為:CompositeComponents 的Web工程,其完整的目錄結(jié)構(gòu)如下所示 -
在創(chuàng)建組合組件之前,請(qǐng)確保使用正確的命名空間,如下所示。
xmlns:composite="http://xmlns.jcp.org/jsf/composite"
創(chuàng)建一個(gè)文件: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
標(biāo)簽用于聲明可配置的值。 composite:implementation
標(biāo)簽用于聲明所有XHTML標(biāo)記和cc.attrs.username
用于定義inputText
組件的值。 ccs是JSF中復(fù)合組件的保留字。 表達(dá)式#{cc.attrs.attribute-name}
用于訪問為組合組件界面定義的屬性。
上述代碼作為名為composite-component.xhtml
的文件存儲(chǔ)在應(yīng)用程序Web根目錄的 resources/com
文件夾中。
使用復(fù)合組件的網(wǎng)頁通常稱為使用頁面。 使用頁面包含對(duì)xml
命名空間聲明中復(fù)合組件的引用,如下所示:
<html xmlns:co="http://xmlns.jcp.org/jsf/composite/com">
這里,com
是存儲(chǔ)文件的文件夾,co
是用于訪問組件的引用。
創(chuàng)建一個(gè)文件: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>
運(yùn)行項(xiàng)目后,在網(wǎng)頁上將看到以下用戶界面 -