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

JSF應用程序的生命周期

開發 后端
本文詳細介紹JSF應用程序的生命周期,包括恢復視圖,應用請求的值和更新模型值等。

與很多流行的觀點不同,我們無需了解技術工作原理的所有細節,就可以編寫 JSF 應用程序。您只需要給自己設置一個項目,并從頭到尾不斷修修補補,這樣就可以學習到大量的知識。另一方面,理解必要的基礎知識可以使您的開發工作更加有效 —— 而且會節省很多時間。

在本系列 懷疑論者的 JSF 的第 2 篇文章中,我們將逐一介紹一下 JSF 請求處理生命周期的 5 個階段。我們將介紹在每個階段中會發生什么,以及這些階段是如何相互連接在一起的,然后使用一個示例程序來展示實際的生命周期。我們還將向您介紹如何在 JSF 開發中采用 Struts Tiles,以及如何組合使用 JSF 和 JavaScript 技術進行即時事件的處理。

正如上一篇文章中介紹的一樣,示例程序的默認編譯環境是 Maven。您可以通過點擊頁面頂部或底部的 Code 圖標下載源代碼。為了簡單性起見,您會發現與上一篇文章中一樣的示例設置。

JSF應用程序的生命周期:概述
JSF 程序生命周期的 5 個階段如下(注意每個階段的事件處理):
1. 恢復視圖
2. 應用請求的值;處理驗證
3. 更新模型值;處理事件
4. 調用程序;處理事件
5. 進行響應;處理事件

這 5 個階段顯示了 JSF 通常處理 GUI 的順序。雖然這個清單列出了每個階段中事件處理的可能執行順序,但是 JSF生命周期很難是固定一成不變的。您可以通過忽略某個階段或合并整個生命周期從而對執行順序進行修改。例如,如果一個無效的請求值被拷貝到一個組件中,那么當前的視圖就會重新顯示,而有些階段就可能不會執行。在這種情況中,您可以執行一個 FacesContext.responseComplete 方法調用,將用戶重定向到一個不同的頁面上,然后使用請求分發器(從 FacesContext 中的請求對象中獲得)將其轉發到一個適當的 Web 資源上。另外,您可以調用 FacesContext.renderResponse 重新顯示原來的視圖。(詳細信息請參看下面的示例程序。)

關鍵是讓生命周期構成您的開發項目,而不完全依賴于生命周期。在需要時,您可以修改生命周期,而不用擔心破壞您的程序。在大部分情況中,您會發現 JSF生命周期是值得遵守的,因為它的邏輯非常好。表單必須在任何應用程序邏輯執行之前進行驗證,并且在進行驗證之前,必須對域中的數據進行轉換。遵守生命周期的規定,可以讓您更自由地考慮有關驗證和轉換的問題,而不是請求處理本身的階段。有一點非常重要:其他 Web 框架也都具有類似的生命周期;它們只不過是沒有很好地進行宣傳。

專注
有些使用 JSF 的開發者可能從來都不會編寫一個組件,也不會對框架進行任何擴展;而另外一些人則專注于這種任務的開發。盡管 JSF生命周期與大部分那其他項目都是相同的,但是根據在項目中的角色您可以采用不同的階段。如果您更專注于通用的應用程序開發,就可能會關注請求處理生命周期的中間階段:
◆應用請求值
◆更新模型值
◆調用程序

如果您專注于 JSF 組件的開發,就可能會關注于整個生命周期中的第一個階段和最后一個階段:
◆恢復視圖
◆進行響應

在接下來的幾節中,我們將遍歷 JSF 請求處理生命周期的每個步驟,包括事件處理和驗證。了解了每個步驟的基本知識之后,我們將簡要介紹一個示例程序,它可以展示這些步驟如何一起使用。在開始之前,首先來看一下圖 1,這是一個有關 JSF生命周期的圖。

JSF 生命周期

圖1. JSF生命周期

階段 1:恢復視圖
在 JSF生命周期的第一個階段 ——恢復視圖 —— 中,會有一個來自 FacesServlet 控制器的請求。控制器會對請求進行考查,并提取出視圖的 ID,這是由 JSP 頁面的名字來確定的。

JSF 框架控制器使用這個視圖 ID 來為當前的視圖查找組件。如果這個視圖尚未存在,那么 JSF 控制器就會創建它。如果這個視圖早已存在,那么 JSF 控制器就會使用它。這個視圖包含了所有的 GUI 組件。

生命周期的這個階段表示為三個視圖實例:新視圖、原始視圖和后視圖,每個視圖的處理方式都不相同。在 新視圖 的情況中,JSF 會構建 Faces 頁面的視圖,并將事件處理程序和驗證程序綁定到組件上。這個視圖被保存在一個 FacesContext 對象中。

FacesContext 對象包含了 JSF 用來管理當前會話中當前請求的 GUI 組件狀態所需要的所有狀態信息。FacesContext 將視圖保存在自己的 viewRoot 屬性中;viewRoot 包含了當前視圖 ID 的所有 JSF 組件。

在 原始視圖 的情況中(第一次加載的是一個頁面),JSF 會創建一個空視圖。這個空視圖會在用戶事件產生時進行填充。JSF 可以直接從原始視圖過渡到進行響應的階段。

在 后視圖(postback) 的情況中(用戶返回之前訪問過的頁面),包含頁面的視圖早已經存在了,因此只需要進行恢復就可以了。在這種情況中,JSF 就使用現有視圖的狀態信息來重構狀態。后視圖的下一個階段是應用請求值。

階段 2:應用請求值
應用請求值 階段的目的是讓每個組件檢索自己當前的狀態信息。這些組件必須首先通過 FacesContext 對象進行檢索或創建(使用其值)。雖然組件值也可以從 cookie 或頭文件中進行檢索,但是它們通常是通過請求參數進行檢索的。

如果一個組件的即時事件處理屬性 沒有 設置為 true,那么就會對這些值進行轉換。因此,如果 域 被綁定到一個 Integer 屬性上,那么該值就會被轉換為一個 Integer 類型。如果值的轉換失敗了,那么就會生成一個錯誤消息,并在 FacesContext 中進行排隊,在產生響應的階段會顯示其中的消息,同時還會顯示所有的驗證錯誤。

如果一個組件的即時事件處理屬性 的確 被設置為 true,那么這些值就會被轉換為適當的類型,并進行有效性驗證。然后轉換后的值會被保存到組件中。如果值轉換或值的有效性驗證失敗了,就會生成一個錯誤消息,并在 FacesContext 中進行排隊,在產生響應的階段會顯示其中的消息,同時還會顯示所有的驗證錯誤。

處理驗證
生命周期中的第一個事件處理發生在應用請求值階段之后。在這個階段中,每個組件都有一些值需要根據應用程序的驗證規則進行有效性驗證。這些驗證規則可以是預先進行定義的(JSF 中提供的),也可以由開發者進行定義。用戶所輸入的值會與這些驗證規則進行比較。如果說輸入的值無效,就會向 FacesContext 中添加一個錯誤消息,并且該組件會被表示為無效的。如果一個組件被表示為無效的,那么 JSF 就會轉到產生響應的階段,在這個階段中會顯示當前的視圖,以及驗證錯誤消息。如果沒有有效性驗證錯誤,那么 JSF 就會轉到更新模型值的階段。

階段 3:更新模型值
JSF 應用程序生命周期中的第三個階段 ——更新模型值 —— 負責更新服務器端模型的實際值,通常來講,這都是通過更新后臺 bean(稱為管理 bean)的屬性實現的。只有那些與組件值綁定在一起的 bean 屬性才會被更新。注意這個階段發生在有效性驗證之后,因此可以確保拷貝到 bean 屬性的值都是有效的(至少在表單域一級都是有效的;在業務規則一級仍可能無效)。

階段 4:調用程序
在生命周期的第四個階段 ——調用程序 —— 中,JSF 控制程序會調用程序來處理 表單 的提交操作。組件值已經經過了類型轉換和有效性驗證,并被應用到模型對象中了,因此您現在可以使用它們來執行應用程序的業務邏輯了。

在這個階段,您還可以為一個給定的序列或很多可能的序列指定后面的邏輯視圖,這可以通過為一次成功的表單提交定義一個特定的結果并返回這個結果來實現。例如:在成功輸出時,將用戶重定向到下一頁中。要讓這種導航工作能夠起作用,您需要在 faces-config.xml 文件中創建一個到 成功輸出 的映射作為一條導航規則。一旦導航發生之后,您就轉換到生命周期的最后一個階段了。

階段 5:進行響應
在生命周期的第五個階段 ——進行響應 —— 中,您可以在視圖中顯示當前狀態中的所有組件。

【編輯推薦】

  1. JSF標記與JSTL標記混合使用
  2. 升級JSF1.2的艱難之旅
  3. OSGi與JSF結合開發
  4. 使JSF支持帶有HTMLMessage
  5. JSF如何使用ExternalContext
責任編輯:佚名 來源: CSDN
相關推薦

2015-07-09 15:42:48

ios應用生命周期

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2014-07-11 11:09:10

App應用程序生命周期

2009-06-11 11:28:35

JSF生命周期

2009-06-24 10:47:55

JSF生命周期

2011-08-10 16:50:10

iPhone生命周期

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2014-02-24 10:50:32

DevOps云應用

2014-09-28 11:28:02

Android應用程序生命周期

2025-04-28 01:22:00

2023-12-21 08:00:00

ChatGPT人工智能大型語言模型

2010-08-01 15:29:04

AndroidDalvik

2012-08-16 09:38:38

ASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2009-06-23 18:11:02

JSF的生命周期Ajax處理

2012-06-20 10:29:16

敏捷開發

2009-06-29 14:19:50

2014-07-16 13:39:30

Windows Pho
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久综合av | 综合久久色| 国产精品自在线 | 黄色av网站免费看 | 日韩美女爱爱 | 成人午夜高清 | 91婷婷韩国欧美一区二区 | 黄网站在线观看 | 国产精品成人国产乱 | 在线观看视频中文字幕 | 蜜臀网| 成年人精品视频 | 亚洲免费久久久 | 中文字幕一区二区三区精彩视频 | 精品久久久久久红码专区 | 色婷婷综合久久久久中文一区二区 | 看片一区| 一区二区三区日本 | 中文字幕 欧美 日韩 | 最新毛片网站 | www.99热这里只有精品 | 午夜性色a√在线视频观看9 | 欧美一区 | 97caoporn国产免费人人 | 国产精品精品久久久 | 欧美一区二区三区大片 | 久久国| 日韩久久精品 | 日韩三级在线观看 | 中文字幕一区二区三区在线观看 | 国产片一区二区三区 | 精品福利在线 | 久久久久一区 | 国产成人网 | 日韩欧美日韩在线 | 亚洲精品白浆高清久久久久久 | 日韩视频免费看 | 国产成在线观看免费视频 | 国产精品久久国产精品99 gif | 国产精品久久99 | 国产成人精品a视频一区www |