0

Every article and JSF2 spec keeps saying that a view is restored and saved. No one says anything about how many versions of the same view is saved per user. I can see that the value of the javax.faces.ViewState hidden variable keeps changing after every post back. I also know that I can work on the same page from two different browser tabs and each tab maintains its own state.

So, the questions is, every time a postback happens, is a new version of the view saved (in addition to the copies that are already saved)?

I need to know this for two reasons. a) to estimate session size b) to script automated testing.

Thanks.

4

2 に答える 2

0

そのため、Mojarra がサーバーに状態を保存する方法についてさらに調査を行いました。Mojarra のソース コードを調べ、セッション リスナーと、ユーザー セッションの内容を出力するサーブレットを作成しました。これは私が見つけたものです:

Mojarra は、「com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap」という名前でセッションにマップを追加します。タブから要求された一意の XHTML ページごとに、そのマップにエントリが追加されます。このエントリもマップです。ビュー ステートは、この 2 番目のマップ内に保存されます。私が見る限り、ページの最初の GET リクエストとポストバックごとに個別の状態が保存されています。たとえば、ユーザーが最初にページを表示してからフォームを 3 回送信すると、同じページに対して 4 つの個別の状態が保存されます。Mojarra には、ブラウザーの戻るボタンをサポートするために、すべてのポストバックを保存するしかないと思います。

概念的には、トップレベルのマップ (「com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap」という名前でセッションに保存されたマップ) の内容は次のようになります。

/index.xhtml:Tab#1. This is a map and contains:
    - View state for initial GET
    - View state for postback #1
    - View state for postback #2

/index.xhtml:Tab#2. This is a map and contains:
    - View state for initial GET
    - View state for postback #1
    - View state for postback #2

/another.xhtml:Tab#1. This is a map and contains:
    - View state for initial GET
    - View state for postback #1
    - View state for postback #2

忙しいサイトにとってこれが意味することは恐ろしいことです。

于 2012-10-12T16:27:20.497 に答える
0

したがって、質問は、ポストバックが発生するたびに、ビューの新しいバージョンが保存されるということです

その部分は本当です。

(すでに保存されているコピーに加えて)?

その部分は真実ではありません。(GET 要求から) 新しく作成されたビューのみが追加され、(POST 要求から) 復元されたビューは追加されません。

ポストバックでは、ビューが復元、操作、および保存されます。これにより、基本的にまったく同じビューの以前のバージョンが置き換えられます。

以下も参照してください。

于 2012-10-11T17:15:40.430 に答える