visualforce中的sObject?

时间:2011-09-07 14:25:30

标签: salesforce apex-code visualforce

我有一个顶点控制器,它建立一个列表,显示在数据表中。该列表组合了不同的对象,因此我创建的变量是List

假设此列表中的所有对象都有一个“external__c”字段。如何告诉visualforce渲染此字段?使用{!obj.external__c}将不起作用,因为它是一个sObject。

2 个答案:

答案 0 :(得分:2)

如果你有一个SObject列表,你可以使用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%确定我的getter上的语法是否正确,但它已经接近;)希望这可以帮助你实现你所追求的目标!

答案 1 :(得分:0)

假设在控制器中声明了list属性: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];

好吧,我要去喝一品脱了。希望有所帮助!