[salesforce]ビューステートについて
ビューステートの紹介。
参考: An Introduction to Visualforce View State
ビューステートって何?
ビューステートとは、Visualforceページのある瞬間の遷移状態を保持するために、formタグ内のinput hidden項目に暗号化されて自動的に保持される情報です。保持される情報には、
- カスタムコンポーネント
- formタグの入力項目
- ページコントローラとエクステンションの状態
があります。
ビューステートを理解するには、post backリクエストを理解する必要があります。post backリクエストとは、Visualforceページにおいてformタグから情報を送信した際に、情報送信後の次の遷移ページが送信前と同一ページである場合のポストリクエストのことを指します。
参考:[ salesforce ]Visualforceページ表示処理の実行順序
例えば以下のように、単純な投稿フォームがあるとき、「送信」→「入力エラー」→「訂正、再送信、送信成功」という操作を行ったとします。
最初のページ表示、次の2回のポスト送信の3つのリクエストはHTTP的には独立した通信と見なされます。しかし、例えば、画面遷移を経ている途中で、前画面で入力した情報を次の画面でも使い回したい、というような場合が多々あります。例えば、レコードの編集画面やウィザード形式の入力画面などです。ユーザ的にはこれらのページ遷移をひとかたまりの操作として認識するため、一貫した情報の保持が必要になります。その情報を保持するのがビューステートです。
ビューステートの確認
ビューステートは、Visualforceページ内に暗号化された文字列として保持されています。その内容を確認するには、ブラウザ上から開発モードでview state インスペクタを使って確認できます。
これはある瞬間のあるページのビューステート例です。コントローラで利用しているAccountレコードの状態や、カスタムコンポーネントの状態などが保持されており、それぞれのサイズも確認できます。
ビューステートのサイズ
ビューステートは128KBまでというガバナ制限があります。この容量を超えるビューステートを保持するようなページではエラーが発生します。そのため、あまりに多くのビューステートを保持しそうなページにおいては、ビューステートのサイズを縮小するための工夫をする必要があります。たとえば以下のような方法があります。
transient
修飾子を付けて変数を宣言することによってその変数をビューステートの対象外とする。- ビューステートを使わずに、カスタムオブジェクトやカスタム設定に情報を保持するように開発する。