navigation メソッドの定義
カスタムコントローラの action メソッドは、データベース更新および他の計算を実行するほか、PageReference オブジェクトを返して、ユーザを別のページに移動することができます。
PageReference は、ページのインスタンス化への参照です。多数の属性の 1 つである PageReferences は URL、一連のクエリパラメータ名および値で構成されます。
-
組織ですでに保存している Visualforce ページの PageReference を参照します。このプラットフォームはこのようにページを参照することで、コントローラまたはコントローラ拡張が指定されたページの有無に依存することを認識し、コントローラまたは拡張が存在する間はページが削除されないようにします。
-
Lightning プラットフォームでホストされる任意のページに PageReference を作成します。たとえば、'partialURL' を '/apex/HelloWorld' に設定すると、http://mySalesforceInstance/apex/HelloWorld にある Visualforce ページを参照します。同様に、'partialURL' を '/' + 'recordID' に設定すると、指定したレコードの詳細ページを参照します。
この構文は、PageReference はコンパイル時ではなく、実行時に構成されるため、Page.existingPageName のページ以外の Visualforce ページの参照にはお推めしません。実行時の参照は、参照整合性システムには使用できません。したがって、プラットフォームはこのコントローラまたはコントローラ拡張機能が指定されたページの有無に依存することを認識しないため、ユーザによるページの削除を防ぐためにエラーメッセージを表示しません。
-
外部 URL の PageReference を作成します。次に例を示します。
この例では、ユーザが [保存] をクリックした後に、そのユーザを新しい URL にリダイレクトすることを想定します。これを行うには、まず次の URL に移動し、クイック修正を使用して mySecondPage という 2 つ目のページを作成します。
それから、mySecondPage に次のマークアップを追加します。簡略化のために、チュートリアルの最初の方で定義した次の標準コントローラベースのページを使用します。
ここで、action メソッドの定義で作成した元のページに戻り、取引先 id クエリパラメータを URL に指定していることを確認します。新しく作成した「mySecondPage」ページに PageReference を返すように、コントローラの save メソッドを編集します。
上記のコードでは、PageReference の redirect 属性は true に設定されています。この属性が設定されていない場合、PageReference はブラウザに返されますが、移動は発生せず、元のページの URL のままになります。移動先の URL を変更する場合は、redirect 属性を設定する必要があります。
ここでページをテストする場合、[新規取引先名を保存] をクリックすると mySecondPage に移動しますが、データのコンテキストは失われるため、{!account.name} で使用できる値はありません。これは、リダイレクトが発生したときにコントローラがコンテキストの状態をクリアするからです。そのため、PageReference のパラメータの対応付けで id クエリ文字列パラメータをリセットする必要があります。