StandardController クラス
名前空間
使用方法
StandardController オブジェクトは、Salesforce が提供する、開発済みの Visualforce コントローラーを参照します。StandardController オブジェクトを参照する必要があるのは、標準コントローラーの拡張を定義する場合のみです。StandardController は、拡張クラスコンストラクターの単一引数のデータ型です。
インスタンス化
1ApexPages.StandardController sc = new ApexPages.StandardController(sObject);例
次の例では、StandardController オブジェクトの標準コントローラー拡張のコンストラクターでの使用方法を示します。
1public class myControllerExtension {
2
3 private final Account acct;
4
5 // The extension constructor initializes the private member
6 // variable acct by using the getRecord method from the standard
7 // controller.
8 public myControllerExtension(ApexPages.StandardController stdController) {
9 this.acct = (Account)stdController.getRecord();
10 }
11
12 public String getGreeting() {
13 return 'Hello ' + acct.name + ' (' + acct.id + ')';
14 }
15}次の Visualforce マークアップは、上記のコントローラー拡張をページ内で使用する方法を示します。
1<apex:page standardController="Account" extensions="myControllerExtension">
2 {!greeting} <p/>
3 <apex:form>
4 <apex:inputField value="{!account.name}"/> <p/>
5 <apex:commandButton value="Save" action="{!save}"/>
6 </apex:form>
7</apex:page>StandardController メソッド
StandardController のメソッドは次のとおりです。すべてインスタンスメソッドです。
addFields(fieldNames)
署名
public Void addFields(List<String> fieldNames)
戻り値
型: Void
使用方法
このメソッドは、レコードが読み込まれる前にコールする必要があります。通常、コントローラーのコンストラクターによってコールされます。このメソッドがコンストラクター外でコールされる場合、addFields() をコールする前に reset() メソッドを使用する必要があります。
fieldNames の文字列には、AccountId などの項目の API 項目名か、something__r.myField__c などの項目への明示的なリレーションを使用できます。
このメソッドは、動的な Visualforce バインドで使用されるコントローラーのみに使用できます。
getId()
署名
public String getId()
戻り値
型: String
getRecord()
署名
public SObject getRecord()
戻り値
型: sObject
使用方法
関連付けられた Visualforce マークアップで参照される項目のみを、この SObject で照会することができます。関連するオブジェクトの項目など、その他のすべての項目については、SOQL 表現を使用して照会する必要があります。
例
1<apex:outputText
2value="{!account.billingcity}
3{!account.contacts}"
4rendered="false"/>reset()
署名
public Void reset()
戻り値
型: Void
使用方法
これは、addFields がコンストラクター外でコールされる場合にのみ使用するメソッドで、addFields がコールされる直前にコールする必要があります。
このメソッドは、動的な Visualforce バインドで使用されるコントローラーのみに使用できます。