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

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

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

    Java學習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    深入了解JSF(二):從JSF的Lifecycle看JSF對頁面的處理機制和流程

    FacesServlet,Lifecycle,Component(組件), BackingBean,JSP是JSF整個框架中的支柱,Component的作用尤為重要。而JSF把JSF生命周期分成6個階段并讓其各司其職,本 文從JSF生命周期的角度全面剖析了JSF對頁面處理的機制和流程。


    在上一篇文章:[深入了解JSF]里,我們比較全面地介紹了JSF。這里,為了加深對JSF的認識,本文,我們從JSF對頁面的處理機制和流程方面對JSF做一下再認識。

    基本上,JSF根據(jù)不同的用戶請求(user request)而做了不同的處理:
    1,    頁面顯示請求:頁面初始化。第一次顯示該頁面時(session單位)。
    2,    事件處理請求:用戶按下了命令按鈕或命令聯(lián)結(jié),需要JSF加以處理。


    下面分別加以介紹。

    頁面初始化時
    1,    用戶請求某JSF頁面
    2,    由WEB服務(wù)器(SERVLET/JSP容器)接受請求,交由FacesServlet.service()處理
    3,    因為是第一次顯示該頁面,直接通過LifecleImpl.render重畫畫面。
    4,     畫面重畫時調(diào)用JspViewHandlerImpl.renderView,實際上通過 RequestDispacher.forward/redirect調(diào)用編譯好的JSP代碼。此時,如果被調(diào)用的JSP還未被編譯或者該jsp文件被修 改過的情況,會先對jsp文件進行編譯后再調(diào)用。
    5,    JSP代碼的執(zhí)行:JSP里,如果是一般的HTML標簽和文本,則直接加以輸出;如 果是標簽(Tag),則 為Tag生成相應(yīng)的instance,分別調(diào)用Tag.doStartTag/doEndTag等進行描畫(生成HTML形式的輸出)。當然特殊的情況, 如h:inputText等JSF標簽,基本處理完全跟其他JSP TAG一樣,但JSF標簽,分成了三部分:標簽(Tag),組件(Component),和描畫器(Renderer),處理時把一般JSP標簽里做的工 作分散到了三部分。
    6,    JSF標簽的描畫:上面提到,JSF標簽的描畫也跟一般JSP標簽的描畫一樣,不過JSF標簽有專門的描畫器(Renderer),一般來說,標準的JSF標簽的描畫過程為:
    Tag.doStartTag > Component.encodeBegin > Renderer.encodeBegin >  Tag .encodeChildren > Component.encodeChildren > Renderer.encodeChildren > Tag.doEndTag > Component.encodeEnd > Renderer.encodeEnd
    也就是說,JSF標簽的Tag,Component只是起了一個調(diào)用作用,真正地描畫工作是在Renderer里完成的。
    7,    頁面初始化完成。畫面顯示。

    按鈕事件處理時
    JSF 對事件的處理就復(fù)雜多了。JSF把整個事件處理分成6個階段:restoreView,applyRequestValuesPhase, processValidations, updateModelValues, invokeApplication,renderView。每個階段完成不同的處理。其中,restoreView階段和renderView階段的處 理跟頁面初始化時完全一樣。

    下面詳細介紹一下各階段的處理流程:
    1,    RestoreViewPhase(重載視圖階段):
    如名所述,這一階段重載畫面的視圖結(jié)構(gòu)。首先試圖從session,或cookie里還原JSF組件數(shù),不能重載視圖的話,JSF則認為該頁面為當前用戶第一次請求,直接跳轉(zhuǎn)到renderView(畫面重畫階段)對畫面進行重畫。
    2,    ApplyRequestValuesPhase(應(yīng)用請求值階段):
    這一階段主要把從瀏覽器過來的數(shù)據(jù)反映到對應(yīng)的組件里。也可以看作為數(shù)據(jù)綁定。另外,這一階段還做了一個很重要的處理。事件(EVENT)的隊列入隊處理(queueEvent),此處被加入隊列中的消息事件將在第5個階段被加以處理。
    主 要調(diào)用過程:Lifecycle.execute() -> ApplyRequestValuesPhase.execute() -> Component.processDecodes() -> Component.decode() -> Component.valueBinding -> Renderer.decode() -> Component.queueEvent()
    3,    ProcessValidationsPhase(合法性檢查階段)
    此階段對數(shù)據(jù)進行合法性檢查。檢查有錯誤的情況下,跳轉(zhuǎn)到畫面重畫階段對畫面進行重畫。
    主 要調(diào)用過程:Lifecycle.execute() -> ProcessValidationsPhase .execute() -> UIViewRoot.processValidators()->HtmlForm.processValidators()->UIInput.validate() -> Validators.validate()
    4,    UpdateModelValuesPhase(更新模型值階段):
    此階段把經(jīng)過變換(CONVERTER變換等)后的組件里值反映到BackingBean里。
    主 要調(diào)用過程:Lifecycle.execute() -> UpdateModelValuesPhase.execute() -> UIViewRoot.processUpdates->HtmlForm.processUpdates->UIInput.processUpdates -> UIInput.updateModel –ValueBinding (#{beanName.propertyName})? BackingBean
    5,    InvokeApplicationPhase(用戶應(yīng)用程序處理/事件處理階段):
    這階段主要調(diào)用用戶的應(yīng)用程序的事件處理方法,對真正的業(yè)務(wù)邏輯加以處理。它是JSF和用戶程序進行接口的部分。
    主 要調(diào)用過程:Lifecycle.execute() -> InvokeApplicationPhase.execute() -> >UIViewRoot.processApplication->HtmlCommandButton.broadcast->ActionListenerImpl.processAction – MethodBinding(#{beanName.methodName})--> BackingBean.eventMethod
    6,    render(頁面重畫階段):同頁面初始化的頁面重畫處理。上面說的很清楚,這里不做重復(fù)了。

    posted on 2008-10-10 08:52 找個美女做老婆 閱讀(2312) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     

    導航

    統(tǒng)計

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 大地资源二在线观看免费高清| 四虎国产成人永久精品免费| 免费无码又爽又刺激高潮 | 国产h视频在线观看免费| 亚洲午夜未满十八勿入| 在线看无码的免费网站| 911精品国产亚洲日本美国韩国 | 韩国日本好看电影免费看| 亚洲一区二区三区高清不卡 | 久久久久久亚洲AV无码专区| 日本一道本不卡免费 | 亚洲情A成黄在线观看动漫软件 | 久久久无码精品亚洲日韩蜜臀浪潮 | 亚洲免费精彩视频在线观看| 久久狠狠躁免费观看| 亚洲第一成年网站大全亚洲| 动漫黄网站免费永久在线观看| 亚洲jjzzjjzz在线观看| 性盈盈影院免费视频观看在线一区| 亚洲AV无码AV男人的天堂不卡| 亚洲AV无码一区二区三区在线观看| 国产免费MV大全视频网站| 亚洲国产精品福利片在线观看| 无码国产精品一区二区免费虚拟VR | 4399好看日本在线电影免费| 亚洲另类无码一区二区三区| 国产伦一区二区三区免费| 国产在线观看无码免费视频| 久久av无码专区亚洲av桃花岛| 国产成人免费爽爽爽视频| 免费观看四虎精品成人| 国产亚洲色婷婷久久99精品| 四虎在线免费视频| 春意影院午夜爽爽爽免费| 亚洲人成网www| 国产精品色午夜免费视频| 国产在线精品免费aaa片| 91在线亚洲综合在线| 77777亚洲午夜久久多人| 黄页网站在线观看免费高清| 男人扒开添女人下部免费视频|