<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 14,  comments - 37,  trackbacks - 0
    記得華為總裁任正非說過,華為是因?yàn)闊o知才走上通信產(chǎn)業(yè)之路的。我在2004年年中開始接觸JSF時(shí),也是因?yàn)闊o知。幾乎沒有Java經(jīng)驗(yàn),Web更是一片空白,寫了一個(gè)半吊子的JSP程序后,我居然判了JSP的死刑,鐵下心來鉆研我的JSF去了。無知者無畏,說得一點(diǎn)也不錯(cuò)。

    從JSP起步,第二級(jí)臺(tái)階,也許Struts是最合適的。沒有復(fù)雜的概念,沒有深?yuàn)W的理論,容易理解,上手快,從JSP向Struts的過渡顯得特別自然。這是Struts流行的原因之一。如果當(dāng)時(shí)請(qǐng)教過任何一個(gè)Java高手,我十有八九會(huì)以Struts作為我的JSP替代技術(shù),并且很有可能成為 Struts的發(fā)燒友。可是,機(jī)緣巧合,我選擇了JSF。

    正應(yīng)了那句俗語:“傻人有傻福。”采用JSF技術(shù)后,Web編程如有神助,一個(gè)月時(shí)間,我和一個(gè)剛畢業(yè)的程序員寫出了一個(gè)規(guī)模不小的Web程序: 126張數(shù)據(jù)庫(kù)表,346個(gè)JSP頁面,458K Java源程序,還包括84頁的《需求規(guī)格說明書》和189頁的《數(shù)據(jù)庫(kù)設(shè)計(jì)說明書》。即便是桌面應(yīng)用,這樣規(guī)模的程序在一個(gè)月內(nèi)完成,老板也該偷著笑了。其實(shí),效率的提高,完全是JSF的功勞。正如Sun在JSF的規(guī)范中所宣稱的那樣,JSF極大地簡(jiǎn)化了Java的 Web編程。

    首先,在JSF中,頁面干凈了許多。無需聲明Javabean,也不用嵌入Scriptlet,沒有多余的符號(hào),只是一些擴(kuò)展標(biāo)簽而已,看上去規(guī)范而不失優(yōu)雅,讓人賞心悅目。程序員多半是完美主義者,眼睛里容不得丑陋的代碼,我認(rèn)識(shí)的一些程序員,平時(shí)不修邊幅,可以整個(gè)冬天都穿同一件夾克,袖口磨得油光發(fā)亮,但他們的程序卻整潔得讓人嫉妒。

    其次,JSP中趾高氣揚(yáng)的Request和Response對(duì)象淡出了JSF。在典型的JSF應(yīng)用中,程序員基本上沒有直接操作Request和 Response對(duì)象的必要,因?yàn)榭蚣茈[藏了對(duì)這兩個(gè)對(duì)象的處理細(xì)節(jié)。不論是從Request中解碼參數(shù),還是將數(shù)據(jù)編碼到Reponse中,都不需要程序員寫任何代碼,JSF知道該怎么做。當(dāng)然,如果非要訪問Request,JSF的隱含對(duì)象為程序員提供了可能。

    JSF的UI組件

    UI組件是JSF最具特色的組成部分。與桌面程序的UI組件不同的是,JSF的UI組件是服務(wù)器端的,但是,在JSF框架的支撐下,這些服務(wù)器端的 UI組件,在程序員看來和桌面程序的UI組件沒什么不同。我用的Jbuilder版本不支持JSF頁面設(shè)計(jì)的所見即所得,當(dāng)我拖動(dòng)一個(gè)UI組件到頁面上時(shí),Jbuilder為我生成的,是一段標(biāo)簽文本,跟隨著我的鼠標(biāo),放在指定的位置。一個(gè)服務(wù)端UI組件就是這樣誕生的,其在頁面上的表現(xiàn)形式也隨之確定。

    沒有所見即所得當(dāng)然有點(diǎn)遺憾,但對(duì)我來說,這已經(jīng)足夠了,因?yàn)榘呀M件的Value和后臺(tái)Javabean的屬性進(jìn)行簡(jiǎn)單的綁定,我就得到了所有需要的程序行為。頁面顯示和后臺(tái)數(shù)據(jù)的同步、用戶輸入的轉(zhuǎn)換、數(shù)據(jù)的有效性驗(yàn)證、錯(cuò)誤信息的提示以及UI組件狀態(tài)的保存和恢復(fù),所有這一切不需要我寫任何代碼, JSF已經(jīng)代勞了。

    JSF的另一個(gè)特色是它的數(shù)據(jù)組件。我曾經(jīng)很長(zhǎng)時(shí)間使用PowerBuilder開發(fā)程序,熟悉PowerBuilder的程序員都知道, PowerBuilder最引人注目的是它的所謂數(shù)據(jù)窗口。并不好看的界面,笨拙的IDE,PowerBuilder單單憑借一個(gè)數(shù)據(jù)窗口,就吸引了大批程序員。PowerBuilder與數(shù)據(jù)庫(kù)是天生的一對(duì),長(zhǎng)期使用PowerBuilder的結(jié)果,我養(yǎng)成了以數(shù)據(jù)庫(kù)為中心的設(shè)計(jì)習(xí)慣。

    這個(gè)習(xí)慣一直保持到今天,幾乎成了我的嗜好,前面提到的126張表,就是最好的例子,換成別的程序員,也許30張表就夠了。

    所以,JSF的數(shù)據(jù)組件讓我一見鐘情。數(shù)據(jù)組件實(shí)際上包括兩個(gè)組件,一個(gè)是UIData,一個(gè)是UIColumn。JSF將數(shù)據(jù)表看成是由若干個(gè)列組成的一個(gè)表格,而行的數(shù)目取決于數(shù)據(jù)源中數(shù)據(jù)的條數(shù)。這與PowerBuilder的數(shù)據(jù)窗口殊途同歸。當(dāng)然,數(shù)據(jù)組件不是直接從數(shù)據(jù)庫(kù)中取得數(shù)據(jù)(實(shí)際上,設(shè)計(jì)模式也不允許程序員這樣做),而是通過一個(gè)Javabean以resultSet的形式傳遞給數(shù)據(jù)組件。在JSP中,這樣的程序邏輯夠我折騰一陣的了,而在JSF中,這和生成一個(gè)文本輸入框一樣容易。
    JSF數(shù)據(jù)組件的用途并不限于顯示數(shù)據(jù)庫(kù)表的內(nèi)容,實(shí)際上,所有實(shí)現(xiàn)了List接口的對(duì)象都可以成為數(shù)據(jù)組件的數(shù)據(jù)源,這給Java的Web編程帶來了極大的便利。而且,如果你想直接編輯數(shù)據(jù)表中的數(shù)據(jù),JSF也可以做到,只需以可讀可寫的方式,將UIColumn的value屬性和數(shù)據(jù)源中你想修改的屬性綁定在一起,用戶在網(wǎng)頁上所做的修改,就會(huì)自動(dòng)保存到數(shù)據(jù)源中。這樣的功能,在JSP中,程序員都要深吸一口氣才敢動(dòng)手的。我的第一個(gè)JSF程序,之所以能在一個(gè)月的時(shí)間內(nèi)完成346個(gè)頁面,數(shù)據(jù)組件功不可沒。

    JSF的事件和生命周期

    OO中的事件,是對(duì)象通信的一種機(jī)制,對(duì)象通過響應(yīng)彼此的事件相互協(xié)調(diào)一致。JSP沒有事件,所以JSP的代碼需要程序員自己去協(xié)調(diào),什么時(shí)候執(zhí)行什么代碼,往往讓程序員大費(fèi)周章。如果說JSP代碼是一群孩子的話,那么程序員就是這群孩子可憐的父母,吃喝拉撒全要操心,哪里能夠集中精力做點(diǎn)事情!所以,小孩要上學(xué),學(xué)知識(shí)可能只是一個(gè)借口,父母想找個(gè)老師代管,才是背后真正的原因。

    JSF就是程序員們所要尋找的老師,把代碼片斷交給JSF去管理,程序員就可以集中精力編寫業(yè)務(wù)邏輯了。在JSF里,有四類事件。值改變事件,當(dāng)用戶在輸入框中輸入數(shù)據(jù)后發(fā)生;動(dòng)作事件,當(dāng)用戶提交Form時(shí)發(fā)生;數(shù)據(jù)模型事件,當(dāng)數(shù)據(jù)表的某行被選中時(shí)發(fā)生;生命周期事件,當(dāng)生命周期從一個(gè)階段進(jìn)入另一個(gè)階段時(shí)發(fā)生。除了生命周期事件,其他事件都是桌面程序中大家所熟知的,而生命周期事件可以想象成窗口事件,例如窗口的生成、關(guān)閉、激活等等。

    談到JSF,就不能不談?wù)凧SF請(qǐng)求處理的生命周期。為什么很多人覺得JSF難學(xué)?都是生命周期惹的禍。JSP的生命周期只有一個(gè)階段,而JSF卻有 6個(gè)階段!為什么要這樣呢?其實(shí),這是JSF框架所必需的。JSF只有細(xì)分生命周期階段,才能對(duì)Request和Response施加粒度足夠細(xì)的控制,因?yàn)镴SP那樣粗粒度的控制,不足以支撐UI組件模型和事件模式。

    在我初學(xué)JSF時(shí),生命周期成了我最大的障礙。不管我如何咬文嚼字地推敲JSF規(guī)范中關(guān)于生命周期的描述,我都無法弄明白到底專家們?cè)谡f什么。甚至直到我完成了我的首個(gè)JSF程序的開發(fā),我還是不懂。這讓我十分的惴惴不安,時(shí)時(shí)擔(dān)心自己誤入歧途。奇怪的是,不論是Sun的Tutorial,還是JSF 的官方規(guī)范都把生命周期放在“頭版頭條”的位置,一開篇就大肆推銷生命周期概念,生命周期真的那么重要嗎?

    這絕對(duì)是一個(gè)錯(cuò)誤!生命周期是JSF的核心,但不是程序員的必修課,初涉JSF的程序員,根本沒有必要浪費(fèi)精力在生命周期晦澀的概念里糾纏,不懂生命周期,照樣可以用JSF來編程。花很少的時(shí)間看看各個(gè)UI組件的功能和屬性,然后弄明白各類事件的含義以及應(yīng)該如何響應(yīng)這些事件,了解一下JSF可配置的頁面導(dǎo)航機(jī)制,再搞清楚Managed Bean是什么東西,馬上就可以動(dòng)手編寫你的第一個(gè)JSF程序了!

    生命周期當(dāng)然重要,不理解生命周期是難以在JSF中深入下去的。但是,如果有機(jī)會(huì)讓我來寫JSF的入門教程的話,我會(huì)把生命周期放在最后一章,等大家都有了JSF的實(shí)踐經(jīng)驗(yàn),對(duì)JSF是如何簡(jiǎn)化Java的Web編程有了感性的認(rèn)識(shí),再來深入剖析JSF的生命周期,才能水到渠成,一點(diǎn)就通。

    posted on 2007-07-12 16:36 冰封的愛 閱讀(441) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 免费一级成人毛片| 一级毛片**免费看试看20分钟| 成人免费a级毛片| 久久久无码精品亚洲日韩蜜臀浪潮| 五月天婷婷精品免费视频| 午夜两性色视频免费网站| 国产精品亚洲精品青青青| 国产精品黄页在线播放免费| 亚洲av无码无线在线观看| 在线观看免费a∨网站| 一级片在线免费看| 91天堂素人精品系列全集亚洲| 美女被cao网站免费看在线看| 亚洲成a人片在线观看久| 成人精品国产亚洲欧洲| 国产成人无码综合亚洲日韩| 成人午夜18免费看| 国产情侣久久久久aⅴ免费| 亚洲日韩国产AV无码无码精品| 亚洲女久久久噜噜噜熟女| 一级毛片免费播放| 国产精品亚洲av色欲三区| 久久精品蜜芽亚洲国产AV| 免费播放春色aⅴ视频| 4444www免费看| 亚洲精品自偷自拍无码| 久久91亚洲人成电影网站| 国产美女无遮挡免费视频| 日本免费中文视频| 亚洲a∨无码男人的天堂| 免费a级毛片无码a∨蜜芽试看 | 国产免费区在线观看十分钟| 精品亚洲成在人线AV无码| 亚洲精品国产精品乱码不99| 在线观看永久免费视频网站| 亚洲w码欧洲s码免费| 亚洲精品女同中文字幕| 91大神亚洲影视在线| 亚洲高清国产AV拍精品青青草原| 免费播放特黄特色毛片| 67194成是人免费无码|