2014-05-04 53 views
0

Hy,JSF是否在會話中存儲UIComponents?

我是JSF的新手,我讀過關於JSF如何在會話中存儲UIComponents或通常說的屏幕。有些問題:

  1. 當你請求例如JSF文件,JSF首先分析它,並會建立像與他的渲染器,驗證器,轉換記憶的畫面表示,因爲JSF將處理來自更快的下一次這種觀點請求因爲它已經用他的驗證器,轉換器......創建了這個UIComponent結構,對嗎?

  2. 使用帶有java代碼的JSF,您可以修改向用戶呈現的屏幕,例如java swing,對不對?

  3. 這些屏幕保存在會話中,對嗎?

  4. 我不知道的是,如果JSF可以重新填充表單,例如當用戶按下瀏覽器中的後退按鈕時,他發送的值,這可能嗎?

  5. 表單字段的值保存在模型bean中,但這些值存儲在其他地方?在UIComponent結構中可能?

  6. 如果用戶按下瀏覽器的後退按鈕並且他在表單中發送的值被保存在具有請求範圍的bean中,會發生什麼情況,它將無法重新填充表單,除非它存儲UIComponent結構中的表單,對嗎?

感謝

回答

0
  1. 有可能是一些緩存,但它是不是在設計或規範固有據我所知。
  2. 您可以修改演示文稿,是的;像javax,swing,no。
  3. 如果瀏覽器重新發送POST,第一次發生的事情將會發生。表單字段值被重發,JSF處理它們,與以前一樣,
  4. 表單字段的值位於表單字段中,並位於通過EL指定爲值的任何支持bean屬性中。參見(4)。同樣的問題,相同的答案。
+0

- 根據本說明書中,組件樹將被創建或檢索。我認爲它必須有一些緩存強制性行爲 - 爲什麼表單輸入的值存儲在服務器的表單域中,除了支持bean? – user3254515

0

對於您的主題問題:默認情況下,是的。除非該組件被標記爲瞬態

對於你的問題:

1)這是不(僅僅)的速度。視圖的恢復是必要的,因爲它保存了關於所需轉換器,驗證器以及UI和你的bean之間的連接的信息。即EL表達式。如果您沒有活動視圖,並且觸發了回發請求(使用ViewState),您將看到ViewExpiredException。如果您在沒有ViewState的情況下觸發請求,則會生成新視圖。

2.)基本上是的。它是就像搖擺你可以務實地向樹添加新的組件。

3。)默認情況下,是的。但是你可以編寫你自己的StateManager,你可以在任何你想要的地方存儲和查看視圖。

4.)後退按鈕(默認情況下)返回瀏覽器的歷史記錄並顯示緩存中的頁面。如果您的視圖不是暫時的,則可以將其存儲在會話中,除非它太舊(請參閱corresponding context param)。如果您從舊視圖中觸發請求,並且該視圖仍在會話中,則會正確處理該視圖。否則,它將在APPLY_REQUEST階段拋出ViewExpiredException。

5.)這些值存儲在你的bean中。該組件僅保持EL表達指向您的bean的屬性

6.)請參閱第4)和5)