コントローラメソッド
- action
- getter
- setter
action メソッド
- <apex:commandButton> はアクションをコールするボタンを作成する
- <apex:commandLink> はアクションをコールするリンクを作成する
- <apex:actionPoller> は定期的にアクションをコールする
- <apex:actionSupport> は、別の名前つきのコンポーネントにイベント (「onclick」、「onmouseover」など) を作成し、アクションをコールする
- <apex:actionFunction> は、アクションをコールする新しい JavaScript 関数を定義する
- <apex:page> はページが読み込まれると、アクションをコールする
たとえば、「カスタムコントローラの作成」のサンプルページでは、<apex:commandButton> タグの action パラメータによって、コントローラの save メソッドがコールされます。その他の action メソッドの例は、「action メソッドの定義」を参照してください。
getter メソッド
getter メソッドはコントローラの値を返します。コントローラによって計算され、ページに表示される各値には、boolean 変数など、対応する getter メソッドが含まれる必要があります。たとえば、「カスタムコントローラの作成」のサンプルページでは、コントローラに getAccount メソッドが含まれます。このメソッドによって、ページのマークアップは、{! } 表記のあるコントローラクラスの account メンバー変数を参照することができます。<apex:inputField> タグの value パラメータは、この表記を使用して取引先にアクセスし、ドット表記を使用して取引先の名前を表示します。getter メソッドの名前は、getVariable にする必要があります。
setter メソッド
setter メソッドは、ユーザ指定の値をページマークアップからコントローラに渡します。コントローラの setter メソッドは、どの action メソッドよりも先に自動的に実行されます。
たとえば、次のマークアップは、リードの基本的な検索機能を実装するページを表示します。関連付けられているコントローラには、検索ボックスの入力に使用する getter メソッドと setter メソッドが含まれており、ユーザが [Go!] をクリックすると、検索テキストを使用して、SOSL クエリを発行します。マークアップは、検索テキストの setter メソッドを明示的にはコールしませんが、ユーザがコマンドボタンをクリックすると、doSearch action メソッドの前に setter メソッドが実行されます。
次のクラスは、上記のページマークアップに使用するコントローラです。
getter メソッドは、コントローラから値にアクセスする場合に必ず必要なメソッドですが、値をコントローラに渡す場合、必ずしも setter メソッドを含める必要はありません。Visualforce コンポーネントが、コントローラに保存されている sObject にバインドされている場合、sObject が対応する action メソッドによって保存または更新されるかぎり、sObject 項目はユーザによって変更されると自動的に設定されます。この動作の例は、「カスタムコントローラの作成」のサンプルページにあります。
setter メソッドの名前は、setVariable にする必要があります。
カスタム拡張またはコントローラを使用したデータの取得と設定
Apex メソッドと変数がコントローラ拡張またはカスタムコントローラによって処理される順序は保証されません。このため、コントローラと拡張クラスは、実行している別のメソッドに依存するのではなく、直接そのメソッドをコールする必要があります。これは、変数の設定とデータベースのデータへのアクセスに特に当てはまります。
たとえば、次のカスタムコントローラの最初のメソッド getContactMethod1 は、contact 変数 c がすでに存在することを前提としていないため、正しい値を常に返します。一方、2 つ目のメソッド getContactMethod2 は、正しい値を返すこともありますが、c がまだ設定されていない場合は正しい値を返すとは限りません。
次のカスタムコントローラにはまったく同じメソッドがあります。ただし、getContactMethod2 は contactMethod1 をコールするため、変数 c は常に設定され、返されるときには正しい値が常に含まれます。
次のマークアップでは、これらのコントローラをコールする 2 つのページを示します。Visualforce マークアップは同じものであり、コントローラの名前のみが変更されています。