我有一個頂點控制器,它建立一個列表以顯示在數據表中。該列表組合了不同的對象,所以我創建的變量是一個列表sObject在visualforce中?
說這個列表中的所有對象都有一個「external__c」字段。我如何告訴visualforce渲染此字段?使用{!obj.external__c}將不起作用,因爲它是一個sObject。
我有一個頂點控制器,它建立一個列表以顯示在數據表中。該列表組合了不同的對象,所以我創建的變量是一個列表sObject在visualforce中?
說這個列表中的所有對象都有一個「external__c」字段。我如何告訴visualforce渲染此字段?使用{!obj.external__c}將不起作用,因爲它是一個sObject。
如果你有一個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%肯定,如果我的吸氣劑語法是正確的,但它很接近;)希望這會幫助你實現你的目標!
假設列表屬性在您的控制器中聲明如此: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];
嗯,我不喝酒。希望有所幫助!
哎呦,你的意思是List包含sObjects?現在,這是一個不同的問題......如何使用sObject而不是使用sObject,你可以在各種對象之間使用通用字段的「全部捕獲」自定義對象,製作所述自定義對象的列表,然後重新投射sObject列表作爲有問題的自定義對象的列表?我的意思是,我從來沒有嘗試過,但它理論上應該...(無論如何,我這次離開,啤酒) – Aaron
正確,sObjects。正如你所提到的那樣,我使用了「全部」自定義對象的想法,但我們遇到了客戶端問題。他們遇到問題,只有安裝用戶才能在託管軟件包中創建自定義對象。我希望在它的地方使用sObject可以緩解這個問題。 – CDelaney
我假設控制器是一個共享類呢? 什麼版本是你的客戶?如果他們在Enterprise或Unlimited上,他們可以通過配置文件爲自定義對象及其字段設置粗糙。如果他們是專業人士,我認爲你必須找到解決方法。假設「共享」問題的答案是肯定的,請嘗試使相關的屬性/方法靜態化。由於靜態是在創建類之前初始化的,因此您應該能夠解決殘缺問題,只要您的代碼可以擴展。 – Aaron