No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
navigation メソッドの定義
カスタムコントローラの action メソッドは、データベース更新および他の計算を実行するほか、PageReference オブジェクトを返して、ユーザを別のページに移動することができます。
PageReference は、ページのインスタンス化への参照です。多数の属性の 1 つである PageReferences は URL、一連のクエリパラメータ名および値で構成されます。
1Page.existingPageName組織ですでに保存している Visualforce ページの PageReference を参照します。このプラットフォームはこのようにページを参照することで、コントローラまたはコントローラ拡張が指定されたページの有無に依存することを認識し、コントローラまたは拡張が存在する間はページが削除されないようにします。
1PageReference pageRef = new PageReference('partialURL');Force.com プラットフォームでホストされる任意のページに PageReference を作成します。たとえば、'partialURL' を '/apex/HelloWorld' に設定すると、http://mySalesforceInstance/apex/HelloWorld にある Visualforce ページを参照します。同様に、'partialURL' を '/' + 'recordID' に設定すると、指定したレコードの詳細ページを参照します。
この構文は、PageReference はコンパイル時ではなく、実行時に構成されるため、Page.existingPageName のページ以外の Visualforce ページの参照にはお推めしません。実行時の参照は、参照整合性システムには使用できません。したがって、プラットフォームはこのコントローラまたはコントローラ拡張機能が指定されたページの有無に依存することを認識しないため、ユーザによるページの削除を防ぐためにエラーメッセージを表示しません。
1PageReference pageRef = new PageReference('fullURL');外部 URL の PageReference を作成します。次に例を示します。
1PageReference pageRef = new PageReference('http://www.google.com');
この例では、ユーザが [保存] をクリックした後に、そのユーザを新しい URL にリダイレクトすることを想定します。これを行うには、まず次の URL に移動し、クイック修正を使用して mySecondPage という 2つ目のページを作成します。
1https://Salesforce_instance/apex/mySecondPageそれから、mySecondPage に次のマークアップを追加します。簡略化のために、チュートリアルの最初の方で定義した次の標準コントローラベースのページを使用します。
1swfobject.registerObject("clippy.codeblock-5", "9");<apex:page standardController="Account">
2 Hello {!$User.FirstName}!
3 <p>You are viewing the {!account.name} account.</p>
4</apex:page>ここで、action メソッドの定義で作成した元のページに戻り、取引先 id クエリパラメータを URL に指定していることを確認します。新しく作成した「mySecondPage」ページに PageReference を返すように、コントローラの save メソッドを編集します。
1swfobject.registerObject("clippy.codeblock-6", "9");public class MyController {
2
3 Account account;
4
5 public PageReference save() {
6 update account;
7 PageReference secondPage = Page.mySecondPage;
8 secondPage.setRedirect(true);
9 return secondPage;
10 }
11
12 public String getName() {
13 return 'MyController';
14 }
15
16 public Account getAccount() {
17 if(account == null)
18 account = [select id, name, site from Account
19 where id = :ApexPages.currentPage().getParameters().get('id')];
20 return account;
21 }
22}上記のコードでは、PageReference の redirect 属性は true に設定されています。この属性が設定されていない場合、PageReference はブラウザに返されますが、移動は発生せず、元のページの URL のままになります。移動先の URL を変更する場合は、redirect 属性を設定する必要があります。
ここでページをテストする場合、[新規取引先名を保存] をクリックすると mySecondPage に移動しますが、データのコンテキストは失われるため、{!account.name} で使用できる値はありません。これは、リダイレクトが発生したときにコントローラがコンテキストの状態をクリアするからです。そのため、PageReference のパラメータの対応付けで id クエリ文字列パラメータをリセットする必要があります。
1swfobject.registerObject("clippy.codeblock-7", "9");public class MyUpdatedController {
2
3 Account account;
4
5 public PageReference save() {
6 update account;
7 PageReference secondPage = Page.mySecondPage;
8 secondPage.setRedirect(true);
9 secondPage.getParameters().put('id',account.id);
10 return secondPage;
11 }
12
13 public String getName() {
14 return 'MyController';
15 }
16
17 public Account getAccount() {
18 if(account == null)
19 account = [select id, name, site from Account
20 where id = :ApexPages.currentPage().getParameters().get('id')];
21 return account;
22 }
23}