PageReference クラス
名前空間
- ページのクエリ文字列パラメータおよび値を表示または設定する
- ユーザを action メソッドの結果として異なるページにナビゲートする
インスタンス化
-
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');
1PageReference pageRef = ApexPages.currentPage();要求ヘッダー
次の表に、要求時に設定される一部のヘッダーを示します。
| ヘッダー | 説明 |
|---|---|
| Host | 要求 URL で要求されるホスト名です。このヘッダーは、常に Force.com サイト要求および「私のドメイン」要求に設定されます。また、HTTP/1.1 ではなく、HTTP/1.0 を使用する場合、その他の要求ではこのヘッダーは省略可能です。 |
| Referer | 現在の要求の URL に含まれるか、リンクされた URL です。このヘッダーは省略可能です。 |
| User-Agent | この要求を開始したプログラム (Web ブラウザなど) の名前、バージョン、拡張子のサポートです。このヘッダーは省略可能で、ほとんどのブラウザで別の値に上書きできます。そのため、信頼できるヘッダーではありません。 |
| CipherSuite | このヘッダーが存在し、空白以外の値である場合、要求には HTTPS が使用されています。それ以外の場合、要求には HTTP が使用されています。空白以外の値の内容はこの API で定義するものではなく、予告なく変更される場合があります。 |
| X-Salesforce-SIP | 要求の要求元 IP アドレスです。このヘッダーは、Salesforce のデータセンター外で開始された HTTP 要求と HTTPS 要求に常に設定されます。 |
| X-Salesforce-Forwarded-To | この要求を処理している Salesforce インスタンスの完全修飾ドメイン名です。このヘッダーは、Salesforce のデータセンター外で開始された HTTP 要求と HTTPS 要求に常に設定されます。 |
例: クエリ文字列パラメータの取得
次の例では、PageReference オブジェクトを使用して、現在の URL のクエリ文字列パラメータを取得する方法を示します。この例では、getAccount メソッドは id クエリ文字列パラメータを参照します。
1public class MyController {
2 public Account getAccount() {
3 return [SELECT Id, Name FROM Account
4 WHERE Id = :ApexPages.currentPage().getParameters().get('Id')];
5 }
6}次のページマークアップは、上記のコントローラから getAccount メソッドをコールします。
1<apex:page controller="MyController">
2 <apex:pageBlock title="Retrieving Query String Parameters">
3 You are viewing the {!account.name} account.
4 </apex:pageBlock>
5</apex:page>getAccount メソッドは、埋め込み SOQL クエリを使用して、ページの URL の id パラメータで指定した取引先を返します。id にアクセスするために、getAccount メソッドは次のように ApexPages 名前空間を使用します。
- まず、currentPage メソッドが現在のページの PageReference インスタンスを返します。PageReference は、クエリ文字列パラメータなど、Visualforce ページへ��参照を返します。
- ページ参照に基づいて、getParameters メソッドを使用して、指定されたクエリ文字列パラメータの名前と値の対応付けを返します。
- 次に、id を指定する get メソッドのコールにより、id パラメータ自体の値を返します。
例: action メソッドの結果として新しいページに移動
カスタムコントローラまたはコントローラ拡張の action メソッドはいずれも、メソッドの結果として PageReference オブジェクトを返すことができます。PageReference の redirect 属性を true に設定すると、PageReference が指定した URL に移動します。
次の例では、save メソッドでこの移動を実装する方法を示します。この例では、save メソッドで返された PageReference によって、ユーザは新たに保存した取引先レコードの詳細ページに移動させます。
1public class mySecondController {
2 Account account;
3
4 public Account getAccount() {
5 if(account == null) account = new Account();
6 return account;
7 }
8
9 public PageReference save() {
10 // Add the account to the database.
11 insert account;
12 // Send the user to the detail page for the new account.
13 PageReference acctPage = new ApexPages.StandardController(account).view();
14 acctPage.setRedirect(true);
15 return acctPage;
16 }
17}次のページマークアップは、上記のコントローラから save メソッドをコールします。ユーザが [保存] をクリックすると、新たに作成した取引先の詳細ページに移動します。
1<apex:page controller="mySecondController" tabStyle="Account">
2 <apex:sectionHeader title="New Account Edit Page" />
3 <apex:form>
4 <apex:pageBlock title="Create a New Account">
5 <apex:pageBlockButtons location="bottom">
6 <apex:commandButton action="{!save}" value="Save"/>
7 </apex:pageBlockButtons>
8 <apex:pageBlockSection title="Account Information">
9 <apex:inputField id="accountName" value="{!account.name}"/>
10 <apex:inputField id="accountSite" value="{!account.site}"/>
11 </apex:pageBlockSection>
12 </apex:pageBlock>
13 </apex:form>
14</apex:page>