自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

項(xiàng)目中使用JSF的經(jīng)驗(yàn)

開(kāi)發(fā) 后端
本文介紹使用JSF的經(jīng)驗(yàn),給大家總結(jié)了一下,一共十五條希望對(duì)大家日后會(huì)有所幫助。

我目前的項(xiàng)目前端使用的是JSF+Seam的架構(gòu),目前項(xiàng)目已經(jīng)進(jìn)入尾聲,我想把使用JSF的經(jīng)驗(yàn)給大家說(shuō)說(shuō),以便大家在使用JSF的時(shí)候,少走彎路。

十五條使用JSF的經(jīng)驗(yàn)

1.異常處理問(wèn)題:請(qǐng)為JSF加入Seam框架,看看Seam - 無(wú)縫集成JSF,共三部分,里面告訴了你怎么在servlet容器下配合spring使用Seam,Seam不是一定要在EJB3和JBoss下才可以使用。因?yàn)閱为?dú)使用JSF的話(huà)她的異常處理功能很簡(jiǎn)陋,跟蹤不到你想看的地方,對(duì)于開(kāi)發(fā)很不方便,你只有打開(kāi)日志才能看到問(wèn)題所在,而Seam在加入 phase-listener以后,對(duì)JSF不同的生命周期都進(jìn)行了功能增強(qiáng),即使不使用Seam任何的功能,她也能毫無(wú)保留的輸出所有的異常棧。

2.css 問(wèn)題:如果你想在你的項(xiàng)目中使用JSF,css太重要了,很多剛開(kāi)始使用JSF的人都不是很習(xí)慣JSF基于塊結(jié)構(gòu)開(kāi)發(fā)頁(yè)面,因?yàn)镴SF讓你注意的是內(nèi)容展現(xiàn)的結(jié)構(gòu),而不是內(nèi)容展現(xiàn)的樣式,這是完全符合w3開(kāi)發(fā)html的初衷,大家使用<table><tr>< td>來(lái)做頁(yè)面展現(xiàn)布局,其實(shí)是錯(cuò)誤已久的方法,如果在JSF中能了解如何使用css進(jìn)行布局,JSF不適合復(fù)雜頁(yè)面設(shè)計(jì)這句話(huà)就不攻自破了。

3. 細(xì)心的使用dataTable組件,數(shù)據(jù)列表是最常用的頁(yè)面組件,但是我毫不留情的說(shuō)JSF的dataTable組件的實(shí)現(xiàn)簡(jiǎn)直太濫了,它就是JSF 開(kāi)發(fā)一大禍根。沒(méi)有很方便的解決特定行樣式顯示的問(wèn)題,沒(méi)有解決回退按鈕風(fēng)險(xiǎn)問(wèn)題,沒(méi)有dataScroll和dataTable組件進(jìn)行數(shù)據(jù)庫(kù)分頁(yè)的優(yōu)雅辦法,數(shù)據(jù)提交的幻影問(wèn)題,我的開(kāi)發(fā)很多時(shí)間用在了dataTable的和其他組件塊融合上面。不過(guò)JSF1.2通過(guò)統(tǒng)一el,加入了對(duì)jstl的 foreach標(biāo)記的支持,我雖然還沒(méi)有使用,但是我認(rèn)為這有可能成為數(shù)據(jù)列表開(kāi)發(fā)的一個(gè)有力補(bǔ)充。

4.建議把JSF的模型bean 和后臺(tái)的業(yè)務(wù)bean合二為一,這樣可以在前端提交頁(yè)面與模型綁定的同時(shí),完成業(yè)務(wù)bean的數(shù)據(jù)封裝,并且交由服務(wù)層處理一氣呵成。這樣做有個(gè)好處,就是我們會(huì)想方設(shè)法通過(guò)各種手段在第一時(shí)間就完成模型bean對(duì)業(yè)務(wù)bean的封裝,消除服務(wù)層對(duì)dto的依賴(lài)。這樣是可行的,因?yàn)镴SF的頁(yè)面綁定機(jī)制提供了很好的幫助。

5.請(qǐng)考慮多的使用convert組件,比如列表頁(yè)面有個(gè)radio塊,提交radio值就是一個(gè)int數(shù)值,然后在展現(xiàn)邏輯去恢復(fù)這個(gè)radio值對(duì)應(yīng)的業(yè)務(wù)模型,這樣增加了展現(xiàn)邏輯處理頁(yè)面數(shù)據(jù)的負(fù)擔(dān),而且不好管理,如果把這個(gè)工作放在自定義的convert中,讓convert在頁(yè)面上顯示int數(shù)值,在提交上尋找對(duì)象,那么頁(yè)面和服務(wù)層就屏蔽了這樣的工作,看到的都是對(duì)象的進(jìn)出。

6.我使用了myfaces一個(gè)自己的組件<t:updateListener>,就是跨頁(yè)面專(zhuān)遞參數(shù),非常好用,剛使用JSF的朋友,可以看到跳轉(zhuǎn)的下一個(gè)頁(yè)面用它怎么做,但是建議傳遞模型對(duì)象,不要傳遞數(shù)值,你使用JSF就是因?yàn)樗腔趯?duì)象考慮頁(yè)面設(shè)計(jì)的。

7.小心使用session來(lái)處理JSF,JSF過(guò)多的使用了session,但是我可以肯定一點(diǎn),展現(xiàn)層一定是需要基于狀態(tài)的方式來(lái)做的,這樣可以簡(jiǎn)化開(kāi)發(fā),無(wú)狀態(tài)的方式會(huì)帶來(lái)更多的無(wú)序代碼。不是每個(gè)人都是高手。可以考慮使用Seam的conversation來(lái)處理,她的長(zhǎng)會(huì)話(huà)特別適合業(yè)務(wù)編輯,默認(rèn)的短會(huì)話(huà)會(huì)填補(bǔ)JSF有時(shí)容易丟失的短期數(shù)據(jù)。

8.調(diào)試JSF的問(wèn)題:有時(shí)你使用JSF想知道你的數(shù)據(jù)在哪個(gè)階段變化了,你不會(huì)把JSF代碼加入到自己的工程中來(lái)調(diào)試把,請(qǐng)加入自定義的phaseListener,繼承phaseListener這個(gè)接口,你可以在把你的程序設(shè)置在任何階段跳出來(lái)進(jìn)行調(diào)試。

9.分頁(yè)的問(wèn)題:在google搜一下,有個(gè)http://www.blogjava.net/steady/archive/2005/12/30/26013.aspx提供了分頁(yè)的方式,我就在使用,這是目前最可能的方式了把,呵呵,不過(guò)要注意她使dataTable的values直接使用了dataModel,她與Seam的@dataModel是不兼容的,所以不能使用Seam的@dataModel功能,需要使用get方式了。

10.如果想使用ajax4JSF等ajax框架,你需要使用facelet,讓頁(yè)面成為標(biāo)準(zhǔn)的xhtml,記好了,不要寫(xiě)了一大堆才發(fā)現(xiàn)這個(gè)問(wèn)題。

11.如果你在dataTable列表頁(yè)面使用了radio的話(huà),你還想在列表上做一些link操作,一定要在操作上加入immediate= true,否則在沒(méi)有選擇radio的情況下她是不會(huì)讓你過(guò)去的。并且列表中要使用selectBooleanRadio,而不是 selectOneRadio或者selectManyRadio。checkbox也是一樣。

12.對(duì)于doGet的方式請(qǐng)使用Seam的<s:link>組件。

13.如果你導(dǎo)入了其他頁(yè)面,而沒(méi)有使用facelet的話(huà),那么導(dǎo)入的那個(gè)頁(yè)面就要完全符合JSF組件的渲染方式,混合html會(huì)解析不出來(lái)。反過(guò)來(lái)在主頁(yè)面應(yīng)該盡量多使用JSF標(biāo)記與html混合的方式,這樣可以使開(kāi)發(fā)變得簡(jiǎn)單,盡管有時(shí)候JSF會(huì)很丟丑,你試試每個(gè)html組件都有個(gè) render屬性就知道了。JSF1.2已經(jīng)把混合的html作為一個(gè)output組件來(lái)輸出,可以和JSF組件兼容,是件好事。對(duì)于混合html這種方式,我想說(shuō)你關(guān)注的是JSF組件和模型的關(guān)系,而不一定頁(yè)面都得是JSF組件標(biāo)記。

14.不要相信JSF運(yùn)行的速度慢,JSF雖然在樹(shù)形組件處理上,每一個(gè)階段都經(jīng)歷了遞歸遍歷,但是要相信JSF依然很快,我現(xiàn)在的系統(tǒng)很快,如果你使用后很慢那是項(xiàng)目產(chǎn)生了問(wèn)題,而不是框架的產(chǎn)生了問(wèn)題。

15.相信JSF一定是下一代表現(xiàn)層的王者,這很重要。

以上十五條使用JSF的經(jīng)驗(yàn)希望對(duì)大家日后會(huì)有所幫助。

【編輯推薦】

  1. JSF組件模型開(kāi)發(fā)指南
  2. Seam與JSF的加減法
  3. JSF圖形組件管理圖形bean組件
  4. 開(kāi)發(fā)自定義JSF組件
  5. JSF和Tapestry全面比較
責(zé)任編輯:佚名 來(lái)源: JavaEye
相關(guān)推薦

2009-06-22 16:24:33

JSF框架中使用的設(shè)計(jì)

2009-06-24 17:21:23

JSF框架設(shè)計(jì)模式

2018-05-02 09:18:17

Linux技巧嵌入式

2023-11-30 09:00:00

TypeScript開(kāi)發(fā)

2009-06-23 11:35:44

JSF的Naviati

2017-07-04 19:02:17

ReacRedux 項(xiàng)目

2024-08-19 01:10:00

RedisGo代碼

2021-08-23 10:40:30

人工智能KubernetesAI

2017-11-13 10:35:24

數(shù)據(jù)中心設(shè)計(jì)優(yōu)勢(shì)

2015-08-03 11:45:37

storyboard

2022-09-30 09:04:29

開(kāi)源開(kāi)發(fā)

2024-04-01 00:00:00

Redis緩存服務(wù)消息隊(duì)列

2024-10-06 13:41:25

2011-07-08 15:20:30

seamjsf

2022-07-21 08:00:00

人工智能開(kāi)發(fā)機(jī)器學(xué)習(xí)

2024-03-14 10:47:58

編程語(yǔ)言物聯(lián)網(wǎng)

2024-09-10 09:05:12

SpringREST并發(fā)

2022-11-02 08:28:05

huskyLinter 工具

2024-11-28 09:54:34

項(xiàng)目架構(gòu)模型

2010-01-18 09:37:39

JSF 2.0Java EE 6
點(diǎn)贊
收藏

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