?? 概述自訂組件.htm
字號(hào):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建網(wǎng)頁 1</title>
</head>
<body>
<p>概述自訂組件</p>
<div id="PageContent">
<table cellSpacing="0" cellPadding="0" width="100%" border="0" id="table3">
<tr>
<td class="pagebody" vAlign="top">
<table style="CLEAR: both" cellSpacing="0" cellPadding="0" width="100%" border="0" id="table4">
<tr>
<td class="pagecontent" vAlign="top" width="100%">
<div class="wiki-content">
所謂的「自訂JSF組件」是一個(gè)概略的稱呼,事實(shí)上,一個(gè)JSF組件包括了三個(gè)部份:Tag、Component 與Renderer。<p>
Tag即之前一直在使用的JSF卷標(biāo),類似于HTML卷標(biāo),JSF卷標(biāo)主要是方便網(wǎng)頁設(shè)計(jì)人員進(jìn)行版面配置與數(shù)據(jù)呈現(xiàn)的一種方式,實(shí)際的處理中,JSF標(biāo)簽的目的在于設(shè)定Component屬性、設(shè)定驗(yàn)證器、設(shè)定數(shù)據(jù)綁定、設(shè)定方法綁定等等。</p>
<p>
Component的目的在于處理請(qǐng)求,當(dāng)請(qǐng)求來到伺服端應(yīng)用程序時(shí),每一個(gè)Component都有機(jī)會(huì)根據(jù)自己的client
id,從請(qǐng)求中取得屬于自己的值,接著Component可以將這個(gè)值作處理,然后設(shè)定給綁定的bean。</p>
<p> 當(dāng)請(qǐng)求來到Web應(yīng)用程序時(shí),HTTP中的字符串內(nèi)容可以轉(zhuǎn)換為JSF組件所需的值,這個(gè)動(dòng)作稱之為解碼(decode),相對(duì)的,將JSF
組件的值轉(zhuǎn)換為HTTP字符串?dāng)?shù)據(jù)并送至客戶端,這個(gè)動(dòng)作稱之為編碼(encode),Component可自己處理編碼、譯碼的任務(wù),也可以將之委托給
Renderer來處理。</p>
<p> 當(dāng)您要自訂Component時(shí),您可以繼承UIComonent或其相關(guān)的子類別,這要根據(jù)您實(shí)際要自訂的組件而定,如果您要自訂一個(gè)輸出組件,可以繼承UIOutput,如果要自訂一個(gè)輸入組件,則可以繼承UIInput,每一個(gè)標(biāo)準(zhǔn)的JSF組件實(shí)際上都對(duì)應(yīng)了一個(gè)
UIComponent的子類別,下圖為一個(gè)大致的類別繼承架構(gòu)圖:</p>
<p>
<img src="introduceCustomComponent-1.jpg" align="absMiddle" border="0"></p>
<p>
實(shí)際上要自訂一個(gè)組件是復(fù)雜的一件工作,您首先要學(xué)會(huì)的是一個(gè)完整的自訂組件流程,實(shí)際上要自訂一個(gè)組件時(shí),您可以參考一下網(wǎng)絡(luò)上的一些成品,例如
Apache MyFaces <span class="nobr">
<a title="Visit page outside Confluence" rel="nofollow" href="http://myfaces.apache.org/">
http://myfaces.apache.org/<sup><img class="rendericon" height="7" alt="" src="images/linkext7.gif" width="7" align="absMiddle" border="0"></sup></a></span>,接下來后面的幾個(gè)主題所要介紹的,將只是一個(gè)自訂組件的簡(jiǎn)單流程。</p>
<p>
Renderer是一個(gè)可替換的組件,您的Component可以搭配不同的Renderer,而不用自行擔(dān)任繪制響應(yīng)或譯碼的動(dòng)作,這會(huì)讓您的Component可以重用,當(dāng)您需要將響應(yīng)從HTML轉(zhuǎn)換為其它的媒介時(shí)(例如行動(dòng)電話網(wǎng)絡(luò)),則只要替換Renderer就可以了,這是一個(gè)好處,或者您可以簡(jiǎn)單的替換掉一個(gè)Renderer,就可以將原先簡(jiǎn)單的HTML響應(yīng),替換為有JavaScript功能的Renderer。</p>
<p>
當(dāng)您開始接觸自訂組件時(shí),您會(huì)開始接觸到JSF的框架(Framework),也許有幾個(gè)類別會(huì)是您經(jīng)常接觸的:</p>
<ul>
<li>javax.faces.component.UIComponent </li>
</ul>
<p>
自訂Component所要繼承的父類別,但通常,您是繼承其子類別,例如UIInput、UIOutput等等。</p>
<ul>
<li>javax.faces.webapp.UIComponentTag </li>
</ul>
<p> 自訂JSF標(biāo)簽所要繼承的父類別,繼承它可以幫您省去許多JSF標(biāo)簽處理的細(xì)節(jié)。</p>
<ul>
<li>javax.faces.context.FacesContext </li>
</ul>
<p> 包括了JSF相關(guān)的請(qǐng)求信息,您可以透過它取得請(qǐng)求對(duì)象或請(qǐng)求參數(shù),或者是
javax.faces.application.Application物件。</p>
<ul>
<li>javax.faces.application.Application </li>
</ul>
<p> 包括了一個(gè)應(yīng)用程序所共享的信息,像是locale、驗(yàn)證器、轉(zhuǎn)換器等等,您可以透過一些
<span class="nobr">
<a title="Visit page outside Confluence" rel="nofollow" href="http://www.javaworld.com.tw/confluence/display/designpattern/Factory+Method">
工廠方法<sup><img class="rendericon" height="7" alt="" src="images/linkext7.gif" width="7" align="absMiddle" border="0"></sup></a></span>
取得相關(guān)的信息。 </div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -