出版時(shí)間:2012-9 出版社:電子工業(yè)出版社 作者:韓陸
Tag標(biāo)簽:無
前言
前言本書是筆者在過去兩年多的時(shí)間里,從事基于JSF和RichFaces開發(fā)的工作總結(jié)和心得。作為一名開發(fā)人員,能有機(jī)會(huì)和同行分享技術(shù),筆者非常珍惜和歡喜。故而在動(dòng)筆之前告誡自己要珍惜每一頁紙,使用簡(jiǎn)練的語言講述更豐富和更深刻的內(nèi)容。書中的每個(gè)技術(shù)點(diǎn)都提供了筆者的經(jīng)驗(yàn)之談和詳實(shí)的示例;與此同時(shí),在示例的文字部分筆者對(duì)代碼做了斟酌處理,以示說明,而將完整的代碼內(nèi)容放到了本書的源代碼部分中。目的是使本書物有所值,相信讀者能體會(huì)其中的良苦用心。本書使用的JSF版本為2.1,RichFaces版本為4.2.1。這份源代碼會(huì)有后續(xù)更新,目的是保證其時(shí)效性和精準(zhǔn)性。一本技術(shù)書籍縱然是經(jīng)典,也有很強(qiáng)的時(shí)效性,有時(shí)軟件版本的升級(jí)會(huì)給講解的軟件版本已經(jīng)陳舊的書籍帶來滅頂之災(zāi)。因此日后筆者會(huì)在JSF和RichFaces升級(jí)后,及時(shí)提供更新的源代碼,以延長(zhǎng)時(shí)效性。對(duì)于精準(zhǔn)性,每個(gè)人都會(huì)犯錯(cuò)。筆者實(shí)是庸才,必然鄙陋之處甚多。但筆者可以保證的是一旦發(fā)現(xiàn)源代碼中有錯(cuò)誤,將會(huì)在第一時(shí)間更新源代碼。若是書中文字有誤,會(huì)在源代碼中附上勘誤表。如果讀者有興趣,可以使用git通過gitHub管理的項(xiàng)目來更新本書源代碼。當(dāng)然你也可以通過瀏覽器訪問并直接下載,附錄A中有關(guān)于本書源代碼的詳細(xì)說明。本書是本經(jīng)驗(yàn)談,筆者竭盡全力并毫無保留地收錄了兩年多來一線工作中使用JSF和RichFaces的經(jīng)驗(yàn)和教訓(xùn)。希望能使讀者少走彎路,快速掌握這門技術(shù)。傳遞經(jīng)驗(yàn)主要傳遞的是學(xué)習(xí)方法,筆者在編寫本書時(shí)常問自己,一個(gè)新手如何能盡快學(xué)習(xí)繁多的組件?首先是歸類,一旦腦海中對(duì)一件事物有了清晰的分類,就會(huì)快速各個(gè)擊破;其次是統(tǒng)一,人們習(xí)慣在做一件新的事情時(shí)采用已有的經(jīng)驗(yàn)作為錨點(diǎn),因此筆者將使用如下統(tǒng)一的方式講述每一個(gè)組件。(1)介紹該組件的功能和相關(guān)組件。(2)從感觀上認(rèn)識(shí)該組件。(3)給出使用樣例,使讀者快速了解如何使用該組件。筆者會(huì)在組件第1次出現(xiàn)時(shí)介紹一遍其公共屬性,書中知識(shí)點(diǎn)重現(xiàn)時(shí)會(huì)有導(dǎo)讀,以使讀者減少重復(fù)閱讀,提升閱讀質(zhì)量。筆者會(huì)將很多心得體會(huì)融入組件講解之中,而不是簡(jiǎn)單地羅列其特性。本書以JSF和RichFaces的特性為單位,逐一講述其原理,以及基本和高級(jí)應(yīng)用方法;同時(shí),由點(diǎn)到面以3個(gè)環(huán)環(huán)相扣的示例為牽引,希冀讀者融會(huì)貫通。本書不是JSF和RichFaces的API大全或者速查手冊(cè),因此不會(huì)羅列每一個(gè)組件的每個(gè)屬性。而是從實(shí)用角度講述組件的常用和重要的技術(shù)點(diǎn),讀者能看到的是如何最快并最準(zhǔn)確地使用JSF和RichFaces。本書只關(guān)注JSF和RichFaces,如果必須交代相關(guān)技術(shù),則將其收錄在附錄中。讀者看不到龐雜的內(nèi)容,筆者希望為讀者提供一個(gè)簡(jiǎn)單且精力集中的學(xué)習(xí)氛圍。筆者最大的心愿就是讓本書成為讀者有機(jī)會(huì)還愿意回頭再翻翻的書籍。面向讀者本書面向的讀者需要至少了解如下知識(shí)。(1)Java的基本使用方法、Eclipse和Tomcat的初級(jí)使用經(jīng)驗(yàn)。(2)HTML基本常識(shí),包括CSS和JavaScript的基本常識(shí)。讀者最好具備的知識(shí)儲(chǔ)備為servlet和JSP開發(fā)經(jīng)驗(yàn),以及http協(xié)議和Ajax基本常識(shí)。閱讀指南本書包括3個(gè)部分共7章。第1部分是入門,分3章引領(lǐng)讀者走進(jìn)JSF和RichFaces。第1章介紹JSF和RichFaces,并說明如何開始用其開發(fā)項(xiàng)目,讀者可通過第1個(gè)實(shí)例學(xué)習(xí)如何快速地開發(fā)一個(gè)Web項(xiàng)目。第2章從JSF的組件講起,這是因?yàn)镴SF是面向組件開發(fā)的。然后介紹JSF的Facelet視圖和模板,這部分將展現(xiàn)JSF的快速開發(fā)和高度復(fù)用特點(diǎn)。接下來說明容器管理,讀者可從中了解JSF頁面和Java類之間的聯(lián)系。最后講解JSF的轉(zhuǎn)換器和驗(yàn)證器等功能性組件,以及JSF的腳本庫。第3章從RichFaces的組件講起,讀者從中可以清晰地了解RichFaces組件的強(qiáng)大和易用性。然后講述RichFaces對(duì)JSF的增強(qiáng),并針對(duì)RichFaces3.3.3升級(jí)到RichFaces4.x提供指導(dǎo)性說明。在本章最后讀者可看到一個(gè)全面使用JSF和RichFaces基本功能的示例,其中引入了許多筆者實(shí)際的技術(shù)成果。第2部分講解原理,其中只有一章,是本書的核心章節(jié)和筆者漫長(zhǎng)的學(xué)習(xí)過程中總結(jié)的結(jié)晶。本章講述JSF如何工作,以及RichFaces如何與JSF結(jié)合并擴(kuò)展。第3部分是進(jìn)階部分,分為3章來講述JSF和RichFaces的高級(jí)應(yīng)用,其中的內(nèi)容對(duì)實(shí)際開發(fā)項(xiàng)目更有指導(dǎo)意義。第5章展現(xiàn)JSF自定義組件的能力,其中第1節(jié)從原理上講述如何自定義一個(gè)組件;第2節(jié)講述JSF2.0推出的composite component,這是一種使用Facelet頁面定義組件的方式,其特點(diǎn)是快捷和易用;第3節(jié)講述如何使用RichFaces提供的自定義組件工具CDK來創(chuàng)建組件。3個(gè)小節(jié)都提供了示例,方便學(xué)習(xí)。第6章首先講述如何利用JSF提供的配置參數(shù)調(diào)優(yōu)性能,接下來講述RichFaces的性能調(diào)優(yōu)。然后講述JSF錯(cuò)誤處理機(jī)制,最后是錦上添花的皮膚、主題的使用,這部分對(duì)提升用戶體驗(yàn)很有意義。第7章收錄了筆者在基于RichFaces開發(fā)中總結(jié)的實(shí)用技術(shù),以及筆者開發(fā)、維護(hù)和使用近兩年的JSF實(shí)例知識(shí)管理系統(tǒng)(KMS),希冀這一示例使讀者在推敲過后掌握J(rèn)SF和RichFaces。學(xué)習(xí)是一種生活習(xí)慣,很多人走出校園后因?yàn)榉N種原因慢慢失去了這個(gè)習(xí)慣,也因此喪失了對(duì)新事物的熱愛。作為一名開發(fā)人員,學(xué)習(xí)是一種生存習(xí)慣。學(xué)習(xí)會(huì)貫穿職業(yè)生涯的始終,甚至是畢生。學(xué)習(xí),對(duì)于開發(fā)人員不是一種技能,而是一種情懷。我們不會(huì)因?yàn)檎莆樟艘婚T新技術(shù)而驕傲,我們會(huì)產(chǎn)生發(fā)自心底的欣慰。筆者才疏學(xué)淺,疏漏之處祈盼讀者不吝指教。
內(nèi)容概要
本書以JSF和RichFaces的特性為單位,逐一講述其基本使用、原理和高級(jí)應(yīng)用;同時(shí),由點(diǎn)到面地以3個(gè)環(huán)環(huán)相扣的示例為牽引,希冀從實(shí)用角度,講述該組件的常用和重要的技術(shù)點(diǎn),書中的每個(gè)技術(shù)點(diǎn)都提供了作者的經(jīng)驗(yàn)之談和翔實(shí)的示例。本書不僅是一本技術(shù)書,更是一本經(jīng)驗(yàn)談。作者把自己兩年多在一線工作中對(duì)JSF和RichFaces的使用經(jīng)驗(yàn)和教訓(xùn),以及學(xué)習(xí)方法通過本書與讀者分享,希望能幫助讀者最快和最準(zhǔn)確地使用JSF和RichFaces,并且通過本書的學(xué)習(xí)方法能迅速學(xué)會(huì)更多有意思及有用的框架。
書籍目錄
第1部分 入門
第1章 緒論2
1.1 JSF簡(jiǎn)介2
1.2 RichFaces簡(jiǎn)介4
1.3 第1個(gè)例子7
1.3.1 創(chuàng)建JSF工程7
1.3.2 創(chuàng)建RichFaces工程12
1.3.3 tinylibrary 1.013
1.4 本章小結(jié)17
第2章 JSF入門18
2.1 JSF組件庫18
2.1.1 標(biāo)準(zhǔn)html庫18
2.1.2 標(biāo)準(zhǔn)核心庫19
2.1.3 頁面組件21
2.1.4 輸入組件26
2.1.5 輸出組件33
2.1.6 行為組件38
2.1.7 元數(shù)據(jù)組件43
2.1.8 多語言組件43
2.1.9 功能性組件44
2.2 JSF視圖52
2.2.1 視圖定義語言(VDL)52
2.2.2 模板的設(shè)計(jì)和使用53
2.3 容器管理56
2.3.1 ManagedBean56
2.3.2 Unified EL59
2.3.3 flash62
2.4 JSF轉(zhuǎn)換器63
2.4.1 轉(zhuǎn)換器組件63
2.4.2 數(shù)字轉(zhuǎn)換組件65
2.4.3 日期時(shí)間轉(zhuǎn)換組件66
2.5 JSF驗(yàn)證器67
2.5.1 驗(yàn)證器組件67
2.5.2 必輸項(xiàng)驗(yàn)證組件69
2.5.3 長(zhǎng)度驗(yàn)證組件69
2.5.4 長(zhǎng)整型范圍驗(yàn)證組件70
2.5.5 浮點(diǎn)型范圍驗(yàn)證組件70
2.5.6 正則驗(yàn)證組件70
2.5.7 JSR303和Bean驗(yàn)證組件70
2.6 JSF腳本75
2.6.1 jsf名字空間75
2.6.2 jsf.ajax名字空間75
2.6.3 jsf.util名字空間76
2.7 JSF變量76
2.8 本章小結(jié)78
第3章 RICHFACES入門79
3.1 RichFaces組件庫79
3.1.1 行為組件79
3.1.2 jQuery82
3.1.3 輪詢組件82
3.1.4 輸入組件84
3.1.5 選擇組件101
3.1.6 菜單組件106
3.1.7 驗(yàn)證組件112
3.1.8 輸出組件116
3.1.9 迭代組件128
3.1.10 集合組件129
3.1.11 樹組件136
3.1.12 拖動(dòng)組件139
3.1.13 功能輸出組件141
3.1.14 監(jiān)聽組件143
3.2 對(duì)JSF的增強(qiáng)144
3.2.1 異步請(qǐng)求組件144
3.2.2 異步輸出容器147
3.2.3 異步隊(duì)列148
3.2.4 js面向切面函數(shù)148
3.2.5 異步區(qū)域組件150
3.2.6 異步腳本函數(shù)組件150
3.2.7 請(qǐng)求隊(duì)列組件151
3.2.8 RichFaces腳本函數(shù)155
3.2.9 其他組件156
3.3 推送技術(shù)158
3.3.1 實(shí)現(xiàn)模式158
3.3.2 配置環(huán)境160
3.3.3 TopicsContext實(shí)踐162
3.3.4 CDI實(shí)踐163
3.3.5 JMS實(shí)踐164
3.3.6 瀏覽器支持166
3.4 從RichFaces 3.x升級(jí)167
3.4.1 Ajax相關(guān)167
3.4.2 樣式表167
3.4.3 組件類167
3.4.4 組件標(biāo)簽及屬性變化167
3.5 第2個(gè)例子167
3.6 本章小結(jié)173
第2部分 原理
第4章 JSF原理176
4.1 請(qǐng)求處理176
4.1.1 生命周期176
4.1.2 傲游全程177
4.1.3 JSF轉(zhuǎn)換機(jī)制186
4.1.4 JSF驗(yàn)證機(jī)制190
4.1.5 立即屬性192
4.2 視圖導(dǎo)航192
4.2.1 JSF與REST192
4.2.2 隱式導(dǎo)航193
4.2.3 基于規(guī)則的導(dǎo)航194
4.2.4 forward和redirect198
4.2.5 PRG200
4.3 事件模型204
4.3.1 事件類型204
4.3.2 監(jiān)聽器類型205
4.3.3 事件觸發(fā)206
4.4 異步請(qǐng)求206
4.4.1 異步請(qǐng)求函數(shù)207
4.4.2 全局函數(shù)208
4.4.3 異步請(qǐng)求處理流程210
4.4.4 異步應(yīng)答對(duì)象211
4.4.5 服務(wù)器端處理213
4.5 RichFaces原理214
4.5.1 框架結(jié)構(gòu)214
4.5.2 異步增強(qiáng)216
4.6 下載應(yīng)用220
4.7 本章小結(jié)221
第3部分 進(jìn)階
第5章 自定義組件224
5.1 custom component224
5.2 composite component231
5.3 使用CDK自定義組件235
5.3.1 UI組件類236
5.3.2 Renderer類236
5.3.3 tablib標(biāo)簽符236
5.3.4 圖畫組件236
5.3.5 CDK名字空間240
5.3.6 package-info243
5.4 本章小結(jié)244
第6章 配置與優(yōu)化245
6.1 JSF配置參數(shù)245
6.2 JSF配置文件249
6.3 資源管理251
6.3.1 資源優(yōu)化252
6.3.2 資源映射253
6.4 錯(cuò)誤處理254
6.4.1 統(tǒng)一錯(cuò)誤導(dǎo)航255
6.4.2 自定義異常處理257
6.4.3 異步請(qǐng)求異常處理259
6.5 皮膚和ECSS259
6.5.1 皮膚主題259
6.5.2 ECSS261
6.5.3 自定義主題262
6.5.4 配置參數(shù)265
6.6 本章小結(jié)266
第7章 技巧和總結(jié)267
7.1 實(shí)戰(zhàn)收錄267
7.1.1 分頁實(shí)現(xiàn)267
7.1.2 數(shù)據(jù)表多選273
7.1.3 提示輸入框274
7.2 知識(shí)管理系統(tǒng)示例275
7.2.1 依賴資源275
7.2.2 功能277
7.3 展望與總結(jié)279
附錄A 本書源代碼280
附錄B 實(shí)例的開發(fā)和調(diào)試環(huán)境281
附錄C Maven簡(jiǎn)明指南283
附錄D 參考資料288
章節(jié)摘錄
版權(quán)頁: 插圖: 恢復(fù)視圖階段的主要任務(wù)是建立或恢復(fù)視圖(UIViewRoot)組件樹對(duì)象,建立視圖對(duì)象的策略如下。 (1)視圖對(duì)象不存在 該階段會(huì)根據(jù)Faces的上下文變量facesContext創(chuàng)建一個(gè)視圖組件樹,參考com.sun.faces.application.view.ViewHandlingStrategy.createView方法。 剛創(chuàng)建的UIViewRoot對(duì)象是視圖組件樹的樹根,這棵樹還沒有枝干。如果元數(shù)據(jù),如頁面參數(shù)等變量在參數(shù)UIViewRoot.METADATA FACET NaME(javaxfaces_metadata)沒有定義,視圖處理流程將不再繼續(xù)。又因?yàn)榻M件樹是空的,樹上的組件不需要更新數(shù)據(jù),沒有驗(yàn)證的組件和需要更新的數(shù)據(jù)模型,也沒有事件需要處理,所以流程應(yīng)當(dāng)直接進(jìn)入請(qǐng)求處理生命周期的第6步。此處的處理是調(diào)用上下文變量的渲染應(yīng)答方法facesContext.renderResponse0,該方法的目的是告訴JSF直接進(jìn)入渲染應(yīng)答階段。 生命周期控制類Lifecyclelmpl的execute方法在每執(zhí)行下一階段之前都要判斷是否有必要讓流程進(jìn)入到第6階段,即渲染階段。由此可知,第2階段~第5階段都是可選的,而非必須經(jīng)歷的。 Lifecyclelmpl類的execute方法片段2如下: (2)視圖對(duì)象存在 判斷是否是postback,如果不是postback的請(qǐng)求if(!facesContext.isPostbackO),也會(huì)執(zhí)行上下文變量的渲染應(yīng)答方法facesContext.renderResponse();;否則恢復(fù)視圖,完成本階段事務(wù)進(jìn)入第2階段。 postback的概念可以理解為當(dāng)前頁面是否為首次進(jìn)入,如果是首次進(jìn)入,該值為false:如果從該頁再次發(fā)起請(qǐng)求,由于頁面已經(jīng)被渲染過一次,所以該值為true。判斷依據(jù)是請(qǐng)求參數(shù)中是否包含javax.faces.ViewState參數(shù),其實(shí)現(xiàn)可以參考ResponseStateManagerImpl類。 ViewState概念從JSF 2.0版本開始出現(xiàn),其實(shí)這個(gè)概念在.net中已經(jīng)存在多年。其作用就是標(biāo)識(shí)當(dāng)前頁面是否被刷新過,一旦被刷新,其值就會(huì)發(fā)生改變。ViewState示例如下: 根據(jù)以上分析,在本例中首次進(jìn)入begin.xhtml時(shí)第1階段會(huì)造一棵空樹。然后將流程送入第6階段,即渲染應(yīng)答階段。
編輯推薦
《JSF2和RichFaces4使用指南》編輯推薦:實(shí)例實(shí)戰(zhàn),組件的調(diào)用詳解。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載