3

サーバーコントローラーでデータのページネーションを管理するために使用するベースコントローラーを作成しました。

私はそのような抽象メソッドを持っています

 public abstract List<sObject> getPagedData();

次に、ベース コントローラーを拡張する各コントローラーが独自のバージョンの getPagedData を実装します。ただし、特定の顧客オブジェクトを返します。 Foo__c

Visualforce ページでからList<sObject> にキャストできますかList<Foo__c>

マイページはこんな感じ

  <apex:dataTable value="{!PagedData}"  var="c"   >
     <apex:column > 
          <apex:facet name="header">Foo</apex:facet>
          <apex:outputText value="{!c.Bar__r.SomeValue__c]}" />
  </apex:column>   

しかし、sObject が認識していないというエラーが表示されBar__rます

動的バインディングhttp://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf.htmを使用できます が、次のようなことを行うにはどうすればよいですか

<apex:outputText value="{0, number, $###,###}">
         <apex:param value="{!c.Amount__c}" />
</apex:outputText>
<apex:outputText value="{0,date,dd/MM/yyyy}">
          <apex:param value="{!c.Date_Of_Birth__c}" />
</apex:outputText>   

DateTimeオブジェクトなどを期待していると言ってエラーが発生するので

4

1 に答える 1

4

行ったことがある。残念ながら、visualforce ページでオブジェクトを直接キャストする方法はありません。

私がこれに対処した方法は、すべてのページネーション ロジックを一般的な形式でベース コントローラーに移動し、子コントローラーがデータを Visualforce ページが期待する形式にキャストする責任を負うようにすることです。

public List<Foo__c> getFooPagedData() {
    List<Foo__c> fooPagedData = new List<Foo__c>();
    for(SObject record : getPagedData()) {
       fooPagedData.add((Foo__c) record));
    }
    return fooPageData;
}

StandardSetControllerを使用してページネーションを制御することも検討してください。カスタムオブジェクトとほとんどの標準オブジェクトではうまく機能しますが、カスタム ApexClasses と一部の標準オブジェクトでは機能しません。つまり、getRecords() メソッドから List を返すために結果セットをキャストする必要があります。

于 2011-06-03T20:14:04.753 に答える