カスタムコントローラによって保存されたデータのリセット
Visualforce は標準コントローラのデータを自動的に更新します。すべてのローカル状態をリセットするには、独自のメソッドで action 属性を使用します。これにより、カスタムコントローラと拡張に含まれるデータが確実に更新されます。
例を見てみましょう。Visualforce ページで、ライブコントローラによって outputText コンポーネントの値が更新されます。式 {! fancyText} が更新されると、テキスト「Hello」の後に最新の取引先名が表示されます。Visualforce ページの標準コントローラによって取引先レコードが追跡されます。カスタム拡張の LiveExtension は、ページが更新されるたびに取引先レコードの取引先の項目 acct を追跡します。
この例では、データを手動でリセットする方法を示すために、標準コントローラ用のコントローラ拡張が作成されています。標準コントローラのデータをリセットする必要はありません。リセット機能が組み込まれています。
1<apex:page standardController="Account" extensions="LiveExtension">
2 <apex:liveController action="{! resetMe}" />
3 <apex:outputText value="{! fancyText}" />
4</apex:page>1public class LiveExtension {
2 Private Account acct;
3 Private ApexPages.StandardController ctrl;
4
5 public LiveExtension(ApexPages.StandardController ctrl) {
6 ctrl.addFields(new List<String>{'Name'});
7 this.ctrl = ctrl;
8 this.acct = (Account)ctrl.getRecord();
9 }
10 public void resetMe() {
11 acct = (Account)ctrl.getRecord();
12 }
13 public String getFancyText() {
14 return 'Hello ' + acct.name + ' (' + acct.id + ')';
15 }LiveExtension には、取引先レコード acct と標準コントローラ ctrl の 2 つの非公開項目があります。コンストラクタは両方の項目をインスタンス化し、getRecord() を呼び出して、Visualforce ページが読み込みを実行するときに acct 項目に最新のデータが格納されるようにします。resetMe() 関数が再度 getRecord() を呼び出します。action 属性に resetMe() を設定しているため、ライブコントローラで変更が検出されると、ページが最新データで更新されます。最後に、getFancyText() が LiveExtension の acct 項目の名前と ID 項目を返します。Visualforce ページの式 {! fancyText} は、ページが読み込まれるたびに getFancyText() を呼び出します。