2011-09-07 46 views
0

我有一個頂點控制器,它建立一個列表以顯示在數據表中。該列表組合了不同的對象,所以我創建的變量是一個列表sObject在visualforce中?

說這個列表中的所有對象都有一個「external__c」字段。我如何告訴visualforce渲染此字段?使用{!obj.external__c}將不起作用,因爲它是一個sObject。

回答

1

如果你有一個SObjects列表,你可以使用obj.get('external__c')獲得一個公共字段,儘管你通常必須將結果轉換爲一個類型以便能夠使用它。

您可以在代碼中創建一個自定義類,你可以用不同的對象填寫:

// inside the controller do this: 
public class COutputObject 
{ 
    private SObject sObj = null; 
    public string strField get {return (string)sObj.get('external__c'); } 

    public COutputObject(SObject s) 
    { 
     sObj = s; 
    } 
} 

// -- snip -- 

// then have a list of these which you'll loop over in the page 
public list<COutputObject> liObjects = new list<COutputObject>(); 

// fill this with data 
for(CustomObj__c sCustom : [select Id, external__c from CustomObj__c limit 200]) 
{ 
    liObjects.add(new COutputObject(sCustom)); 
    // etc. 

for(CustomObj2__c sCustom : [select Id, external__c from CustomObj2__c limit 200]) 
{ 
    liObjects.add(new COutputObject(sCustom)); 
    // etc. 

不是100%肯定,如果我的吸氣劑語法是正確的,但它很接近;)希望這會幫助你實現你的目標!

0

假設列表屬性在您的控制器中聲明如此:Public List<Beer__c> ColdOnes { get; set; }。在Visualforce中,您可以通過控制器中的屬性名稱引用啤酒... {!ColdOnes}。以下是主要來自Visualforce指導拍攝,但我已經適應它以滿足我們的編輯方針,淬火主題:)

<apex:dataTable value="{!ColdOnes}" var="co" id="theTable" rowClasses="odd,even" styleClass="tableClass"> 

    <apex:facet name="caption">table caption</apex:facet> 

    <apex:facet name="header">table header</apex:facet> 

    <apex:facet name="footer">table footer</apex:facet> 

    <apex:column> 

      <apex:facet name="header">Beer Name</apex:facet> 

     <apex:facet name="footer">column footer</apex:facet> 

     <apex:outputText value="{!co.name}"/> 

    </apex:column> 
    <apex:column> 

      <apex:facet name="header">Alcohol Volume</apex:facet> 

     <apex:facet name="footer">column footer</apex:facet> 

     <apex:outputText value="{!co.alcohol_volume__c}"/> 

    </apex:column> 
</apex:dataTable> 

要知道,如果你與你的代碼查詢值設置ColdOnes,你需要選擇您打算在Visualforce中輸出的字段。所以:

ColdOnes=[select name, alcohol_volume__c from Beer__c where blahblahblah]; 

嗯,我不喝酒。希望有所幫助!

+0

哎呦,你的意思是List包含sObjects?現在,這是一個不同的問題......如何使用sObject而不是使用sObject,你可以在各種對象之間使用通用字段的「全部捕獲」自定義對象,製作所述自定義對象的列表,然後重新投射sObject列表作爲有問題的自定義對象的列表?我的意思是,我從來沒有嘗試過,但它理論上應該...(無論如何,我這次離開,啤酒) – Aaron

+0

正確,sObjects。正如你所提到的那樣,我使用了「全部」自定義對象的想法,但我們遇到了客戶端問題。他們遇到問題,只有安裝用戶才能在託管軟件包中創建自定義對象。我希望在它的地方使用sObject可以緩解這個問題。 – CDelaney

+0

我假設控制器是一個共享類呢? 什麼版本是你的客戶?如果他們在Enterprise或Unlimited上,他們可以通過配置文件爲自定義對象及其字段設置粗糙。如果他們是專業人士,我認爲你必須找到解決方法。假設「共享」問題的答案是肯定的,請嘗試使相關的屬性/方法靜態化。由於靜態是在創建類之前初始化的,因此您應該能夠解決殘缺問題,只要您的代碼可以擴展。 – Aaron