成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編寫JSF自定義復合組件的原則和技巧

開發 后端
本文介紹編寫JSF自定義復合組件的原則和技巧,提供如何快速開發可重用 JSF 組件的技巧,而不用像傳統方式那樣自己實現渲染器 (renderer)、狀態管理和事件監聽器。本文提供的原則和技術也對一般的 JSF 開發很有幫助。

介紹

JavaServer Faces(JSF)提供可擴展的組件模型,開發人員可以創建可重用的組件,使用這些自定義組件提高開發效率和降低開發成本。雖然對于定制和重用而言 JSF組件模型非常強大,但是開發人員普遍認為開發 JSF 自定義組件并不容易,因為通常至少需要熟悉 JSF encode/decode 和 state holder 的內部機制并覆蓋相應的方法,如 encodeBegine()、decode()、saveState() 和 restoreState() 等,對于開發復雜的自定義組件,甚至需要深入理解更多的接口,如 NamingContainer、StateHolder、EditableValueHolder 和 ActionSource 等接口。

然而,重用 JSF 標準組件的功能可以極大地簡化自定義組件的開發,尤其對于自定義復合組件更是如此。在大部分情況下,我們可以重用 JSF 框架已經提供的標準渲染器、狀態管理、事件監聽器、轉換器和驗證器。已有的文章或書籍對如何重用這些標準功能涉及很少,本文基于重用的策略提出快速開發 JSF自定義復合組件的原則和技巧。

本文首先總結了 JSF組件開發的通用原則,然后通過一個例子(Value Scroller 自定義復合組件)的開發詳解說明了哪些標準功能可以重用以及如何重用,以達到簡化 JSF自定義復合組件開發的目的。

原則和技巧

開發 JSF自定義復合組件主要有兩個原則,一方面強調重用已有的標準組件;另一方面如何確保自定義組件易于重用。

1、盡可能的重用標準組件的功能和實現

傳統的自定義復合組件開發建議完全覆蓋實現 encode/decode 邏輯,但這樣做耗費時間而且容易出錯。毫無疑問,我們可以通過重用標準組件的渲染器等機制減少甚至根本不用自行編寫這部分代碼。另外,為了實現靈活的配置和使用,自定義復合組件通常需要提供很多屬性,我們需要寫很多代碼來處理這些屬性的讀寫和狀態管理。實際上,我們可以簡單地把自定義復合組件的屬性傳遞給它自身包含的標準組件,由已有的標準代碼去處理這些屬性,而不用重復寫這些代碼。

2、清晰地分離組件類、標簽類和模型類

JSF組件模型建議在組件類、標簽類和模型類之間有明確清晰的責任分配,以便于重用和擴展。組件類不應該依賴于javax.faces.component.html 包,因為組件類不僅可以用于 HTML,而且還應該可以重用于其它標記語言(如 WML)。也就是說組件類不應該直接引用 javax.faces.component.html 包內的 HTML 組件。例如,在你的組件類中創建一個 HtmlCommandButton 的實例是不可取的,你應該考慮用 javax.faces.component 包中的 UICommand .另一方面,如果你希望你的模型類可以重用于不同的 Web 框架,那么你的模型類就不應該依賴于 JSF 的任何包,即模型類只表示業務對象而不包含任何用戶界面相關的組件、數據和狀態。

基于這些傳統方式和本文介紹的原則和技巧,我們可以發現基于重用的開發策略會極大簡化 JSF自定義復合組件的編寫。開發 JSF自定義組件通常需要如下 3 個步驟。

1、擴展 UIComponent
傳統方式:創建一個類,擴展 UIComponent,保存組件狀態,在 faces-config.xml 中注冊組件
重用技巧:
◆選擇 UIPanel 作為布局容器,重用標準組件作為復合組件的子組件。
◆實現內部動作監聽器。

2、定義渲染器或者內聯實現它
傳統方式:覆蓋實現 encode/decode,在 faces-config.xml 中注冊渲染器。
重用技巧:重用標準渲染器類型。

3、創建自定義標簽,繼承 UIComponentTag
傳統方式:返回渲染器類型和組件類型,設置 JSF 表達式屬性
重用技巧:傳遞屬性值給作為子組件的標準組件。

【編輯推薦】

  1. 簡述JSF是什么
  2. Facelets非常適合JSF組件
  3. JSF的八大優勢
  4. JavaServer Faces(JSF)簡介
  5. 簡述JSF組件模型
責任編輯:佚名 來源: 中國IT實驗室
相關推薦

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

啟動頁組件鴻蒙

2022-04-24 15:17:56

鴻蒙操作系統

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網卡metrics

2022-10-26 15:54:46

canvas組件鴻蒙

2022-10-25 15:12:24

自定義組件鴻蒙

2022-02-21 15:16:30

HarmonyOS鴻蒙操作系統

2022-06-20 15:43:45

switch開關鴻蒙

2021-12-21 15:22:22

鴻蒙HarmonyOS應用

2021-11-01 10:21:36

鴻蒙HarmonyOS應用

2021-12-24 15:46:23

鴻蒙HarmonyOS應用

2009-04-23 09:05:08

IE8llq自定義功能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线观看视频一区 | 91精品久久久久久久久久 | 91av久久久 | 欧美综合自拍 | 亚洲国产精品一区 | 国产高清自拍视频在线观看 | 欧美日韩国产不卡 | 中文字幕不卡视频在线观看 | 日本精品一区二区三区在线观看 | 日韩一区二区三区在线 | 精品国产乱码久久久久久闺蜜 | 国产精品视频一区二区三区不卡 | 国产高清视频在线 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 蜜臀久久 | 97久久精品午夜一区二区 | 欧美456| 一区二区三区四区不卡视频 | 国产午夜精品一区二区三区 | 在线成人 | 草草精品| 亚洲精品一区在线观看 | 欧美日韩精品久久久免费观看 | 国产精品视频一 | 亚洲精品视频在线播放 | 久草网在线视频 | 亚洲视频免费在线观看 | 99精品观看| 亚洲视频1区 | 狠狠久久久 | 亚洲一区在线播放 | 欧美视频二区 | 日韩欧美1区2区 | 欧美日韩一区二区在线观看 | 久久久黄色 | 欧美午夜在线 | 黄色国产区 | 18gay男同69亚洲网站 | 成人国产精品免费观看 | 欧美色综合一区二区三区 | 欧美日韩一二三区 |