偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

編寫(xiě)JSF自定義復(fù)合組件的原則和技巧

開(kāi)發(fā) 后端
本文介紹編寫(xiě)JSF自定義復(fù)合組件的原則和技巧,提供如何快速開(kāi)發(fā)可重用 JSF 組件的技巧,而不用像傳統(tǒng)方式那樣自己實(shí)現(xiàn)渲染器 (renderer)、狀態(tài)管理和事件監(jiān)聽(tīng)器。本文提供的原則和技術(shù)也對(duì)一般的 JSF 開(kāi)發(fā)很有幫助。

介紹

JavaServer Faces(JSF)提供可擴(kuò)展的組件模型,開(kāi)發(fā)人員可以創(chuàng)建可重用的組件,使用這些自定義組件提高開(kāi)發(fā)效率和降低開(kāi)發(fā)成本。雖然對(duì)于定制和重用而言 JSF組件模型非常強(qiáng)大,但是開(kāi)發(fā)人員普遍認(rèn)為開(kāi)發(fā) JSF 自定義組件并不容易,因?yàn)橥ǔV辽傩枰煜?JSF encode/decode 和 state holder 的內(nèi)部機(jī)制并覆蓋相應(yīng)的方法,如 encodeBegine()、decode()、saveState() 和 restoreState() 等,對(duì)于開(kāi)發(fā)復(fù)雜的自定義組件,甚至需要深入理解更多的接口,如 NamingContainer、StateHolder、EditableValueHolder 和 ActionSource 等接口。

然而,重用 JSF 標(biāo)準(zhǔn)組件的功能可以極大地簡(jiǎn)化自定義組件的開(kāi)發(fā),尤其對(duì)于自定義復(fù)合組件更是如此。在大部分情況下,我們可以重用 JSF 框架已經(jīng)提供的標(biāo)準(zhǔn)渲染器、狀態(tài)管理、事件監(jiān)聽(tīng)器、轉(zhuǎn)換器和驗(yàn)證器。已有的文章或書(shū)籍對(duì)如何重用這些標(biāo)準(zhǔn)功能涉及很少,本文基于重用的策略提出快速開(kāi)發(fā) JSF自定義復(fù)合組件的原則和技巧。

本文首先總結(jié)了 JSF組件開(kāi)發(fā)的通用原則,然后通過(guò)一個(gè)例子(Value Scroller 自定義復(fù)合組件)的開(kāi)發(fā)詳解說(shuō)明了哪些標(biāo)準(zhǔn)功能可以重用以及如何重用,以達(dá)到簡(jiǎn)化 JSF自定義復(fù)合組件開(kāi)發(fā)的目的。

原則和技巧

開(kāi)發(fā) JSF自定義復(fù)合組件主要有兩個(gè)原則,一方面強(qiáng)調(diào)重用已有的標(biāo)準(zhǔn)組件;另一方面如何確保自定義組件易于重用。

1、盡可能的重用標(biāo)準(zhǔn)組件的功能和實(shí)現(xiàn)

傳統(tǒng)的自定義復(fù)合組件開(kāi)發(fā)建議完全覆蓋實(shí)現(xiàn) encode/decode 邏輯,但這樣做耗費(fèi)時(shí)間而且容易出錯(cuò)。毫無(wú)疑問(wèn),我們可以通過(guò)重用標(biāo)準(zhǔn)組件的渲染器等機(jī)制減少甚至根本不用自行編寫(xiě)這部分代碼。另外,為了實(shí)現(xiàn)靈活的配置和使用,自定義復(fù)合組件通常需要提供很多屬性,我們需要寫(xiě)很多代碼來(lái)處理這些屬性的讀寫(xiě)和狀態(tài)管理。實(shí)際上,我們可以簡(jiǎn)單地把自定義復(fù)合組件的屬性傳遞給它自身包含的標(biāo)準(zhǔn)組件,由已有的標(biāo)準(zhǔn)代碼去處理這些屬性,而不用重復(fù)寫(xiě)這些代碼。

2、清晰地分離組件類、標(biāo)簽類和模型類

JSF組件模型建議在組件類、標(biāo)簽類和模型類之間有明確清晰的責(zé)任分配,以便于重用和擴(kuò)展。組件類不應(yīng)該依賴于javax.faces.component.html 包,因?yàn)榻M件類不僅可以用于 HTML,而且還應(yīng)該可以重用于其它標(biāo)記語(yǔ)言(如 WML)。也就是說(shuō)組件類不應(yīng)該直接引用 javax.faces.component.html 包內(nèi)的 HTML 組件。例如,在你的組件類中創(chuàng)建一個(gè) HtmlCommandButton 的實(shí)例是不可取的,你應(yīng)該考慮用 javax.faces.component 包中的 UICommand .另一方面,如果你希望你的模型類可以重用于不同的 Web 框架,那么你的模型類就不應(yīng)該依賴于 JSF 的任何包,即模型類只表示業(yè)務(wù)對(duì)象而不包含任何用戶界面相關(guān)的組件、數(shù)據(jù)和狀態(tài)。

基于這些傳統(tǒng)方式和本文介紹的原則和技巧,我們可以發(fā)現(xiàn)基于重用的開(kāi)發(fā)策略會(huì)極大簡(jiǎn)化 JSF自定義復(fù)合組件的編寫(xiě)。開(kāi)發(fā) JSF自定義組件通常需要如下 3 個(gè)步驟。

1、擴(kuò)展 UIComponent
傳統(tǒng)方式:創(chuàng)建一個(gè)類,擴(kuò)展 UIComponent,保存組件狀態(tài),在 faces-config.xml 中注冊(cè)組件
重用技巧:
◆選擇 UIPanel 作為布局容器,重用標(biāo)準(zhǔn)組件作為復(fù)合組件的子組件。
◆實(shí)現(xiàn)內(nèi)部動(dòng)作監(jiān)聽(tīng)器。

2、定義渲染器或者內(nèi)聯(lián)實(shí)現(xiàn)它
傳統(tǒng)方式:覆蓋實(shí)現(xiàn) encode/decode,在 faces-config.xml 中注冊(cè)渲染器。
重用技巧:重用標(biāo)準(zhǔn)渲染器類型。

3、創(chuàng)建自定義標(biāo)簽,繼承 UIComponentTag
傳統(tǒng)方式:返回渲染器類型和組件類型,設(shè)置 JSF 表達(dá)式屬性
重用技巧:傳遞屬性值給作為子組件的標(biāo)準(zhǔn)組件。

【編輯推薦】

  1. 簡(jiǎn)述JSF是什么
  2. Facelets非常適合JSF組件
  3. JSF的八大優(yōu)勢(shì)
  4. JavaServer Faces(JSF)簡(jiǎn)介
  5. 簡(jiǎn)述JSF組件模型
責(zé)任編輯:佚名 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2009-06-25 14:53:35

自定義UI組件JSF框架

2009-06-24 15:13:36

自定義JSF組件

2009-06-23 11:35:44

JSF的Naviati

2010-06-09 09:15:58

JSF 2Ajax組件

2009-08-03 13:32:38

C#自定義組件

2023-02-20 15:20:43

啟動(dòng)頁(yè)組件鴻蒙

2022-04-24 15:17:56

鴻蒙操作系統(tǒng)

2009-08-03 13:34:06

自定義C#控件

2022-10-17 14:39:12

自定義彈窗組件鴻蒙

2022-02-16 15:25:31

JS代碼Canvas鴻蒙

2012-02-09 10:58:35

Java

2021-05-28 08:58:41

Golang網(wǎng)卡metrics

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統(tǒng)

2022-06-20 15:43:45

switch開(kāi)關(guān)鴻蒙

2021-12-21 15:22:22

鴻蒙HarmonyOS應(yīng)用

2021-11-01 10:21:36

鴻蒙HarmonyOS應(yīng)用

2021-12-24 15:46:23

鴻蒙HarmonyOS應(yīng)用

2009-04-23 09:05:08

IE8llq自定義功能
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)