コントローラーメソッド
- 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 マークアップは同じものであり、コントローラーの名前のみが変更されています。