?? 概述自訂組件.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建網頁 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組件」是一個概略的稱呼,事實上,一個JSF組件包括了三個部份:Tag、Component 與Renderer。<p>
Tag即之前一直在使用的JSF卷標,類似于HTML卷標,JSF卷標主要是方便網頁設計人員進行版面配置與數據呈現的一種方式,實際的處理中,JSF標簽的目的在于設定Component屬性、設定驗證器、設定數據綁定、設定方法綁定等等。</p>
<p>
Component的目的在于處理請求,當請求來到伺服端應用程序時,每一個Component都有機會根據自己的client
id,從請求中取得屬于自己的值,接著Component可以將這個值作處理,然后設定給綁定的bean。</p>
<p> 當請求來到Web應用程序時,HTTP中的字符串內容可以轉換為JSF組件所需的值,這個動作稱之為解碼(decode),相對的,將JSF
組件的值轉換為HTTP字符串數據并送至客戶端,這個動作稱之為編碼(encode),Component可自己處理編碼、譯碼的任務,也可以將之委托給
Renderer來處理。</p>
<p> 當您要自訂Component時,您可以繼承UIComonent或其相關的子類別,這要根據您實際要自訂的組件而定,如果您要自訂一個輸出組件,可以繼承UIOutput,如果要自訂一個輸入組件,則可以繼承UIInput,每一個標準的JSF組件實際上都對應了一個
UIComponent的子類別,下圖為一個大致的類別繼承架構圖:</p>
<p>
<img src="introduceCustomComponent-1.jpg" align="absMiddle" border="0"></p>
<p>
實際上要自訂一個組件是復雜的一件工作,您首先要學會的是一個完整的自訂組件流程,實際上要自訂一個組件時,您可以參考一下網絡上的一些成品,例如
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>,接下來后面的幾個主題所要介紹的,將只是一個自訂組件的簡單流程。</p>
<p>
Renderer是一個可替換的組件,您的Component可以搭配不同的Renderer,而不用自行擔任繪制響應或譯碼的動作,這會讓您的Component可以重用,當您需要將響應從HTML轉換為其它的媒介時(例如行動電話網絡),則只要替換Renderer就可以了,這是一個好處,或者您可以簡單的替換掉一個Renderer,就可以將原先簡單的HTML響應,替換為有JavaScript功能的Renderer。</p>
<p>
當您開始接觸自訂組件時,您會開始接觸到JSF的框架(Framework),也許有幾個類別會是您經常接觸的:</p>
<ul>
<li>javax.faces.component.UIComponent </li>
</ul>
<p>
自訂Component所要繼承的父類別,但通常,您是繼承其子類別,例如UIInput、UIOutput等等。</p>
<ul>
<li>javax.faces.webapp.UIComponentTag </li>
</ul>
<p> 自訂JSF標簽所要繼承的父類別,繼承它可以幫您省去許多JSF標簽處理的細節。</p>
<ul>
<li>javax.faces.context.FacesContext </li>
</ul>
<p> 包括了JSF相關的請求信息,您可以透過它取得請求對象或請求參數,或者是
javax.faces.application.Application物件。</p>
<ul>
<li>javax.faces.application.Application </li>
</ul>
<p> 包括了一個應用程序所共享的信息,像是locale、驗證器、轉換器等等,您可以透過一些
<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>
取得相關的信息。 </div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -