我有一个顶点控制器,它建立一个列表,显示在数据表中。该列表组合了不同的对象,因此我创建的变量是List
假设此列表中的所有对象都有一个“external__c”字段。如何告诉visualforce渲染此字段?使用{!obj.external__c}将不起作用,因为它是一个sObject。
答案 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];
好吧,我要去喝一品脱了。希望有所帮助!