簡體   English   中英

什么是JSF中的viewstate,它是如何使用的?

[英]What is viewstate in JSF, and how is it used?

在JSF中,有一個與每個頁面關聯的視圖狀態,它與提交等來回傳遞。

我知道viewstate是使用頁面上各種控件的狀態計算的,並且您可以將其存儲在客戶端或服務器端。

問題是:這個值是如何使用的? 它是否用於驗證在提交時發送的值,以確保不會發送相同的請求兩次?

另外,它是如何計算的 - 我意識到富臉可能與myfaces的計算方式不同,但一個想法會很好。

謝謝。

問題是:這個值是如何使用的? 它是否用於驗證在提交時發送的值,以確保不會發送相同的請求兩次?

viewstate存在的原因是因為HTTP是無狀態的。 跨請求的組件狀態需要以某種方式維護。 您可以將狀態存儲在服務器上的內存中並將其綁定到會話,或者每次在請求/響應中對其進行序列化/反序列化。

AFAIK,視圖狀態不用於檢測雙重提交,但如果您附加時間戳或類似的東西,它可以。

視圖狀態也可以加密,以確保客戶端不會改變它。

另外,它是如何計算的 - 我意識到富臉可能與myfaces的計算方式不同,但一個想法會很好。

每個組件都負責使用saveStaterestoreState來保持其狀態(請參閱本教程 )。 因此不同的組件套件會導致不同的視圖狀態。 同樣,不同的JSF實現可能會導致不同的視圖狀態。

如果您熟悉JavaScript,您可以將JSF組件樹看作有點像HTML DOM,其中HTML頁面定義了初始狀態,但您可以在運行時更改它。

視圖技術(通常是JSP或Facelets)定義了初始狀態,但之后它可以以編程方式進行操作。 例如,您可以添加組件或設置屬性 為了使其正常工作,必須在請求之間保持視圖狀態。

視圖狀態分為兩部分。 第一個定義組件樹的結構:

UIView
 - UIForm
    - UICommand
    - UIInput

第二部分定義組件的狀態。 由於像UIData這樣的組件,它們是分開的,其中子項可以(例如)每行狀態。 這是通過StateHolder機制編組/解組的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM