3

我编写了一个 Base 控制器,我想用它来管理服务器控制器上的数据分页。

我有一个像这样的抽象方法

 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>   

Bar__r但是我收到一个sObject不知道的错误

我可以使用动态绑定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 回答