我有一个顶点控制器,它构建了一个要在datatable中显示的列表。这个列表组合了不同的对象,所以我创建的变量是一个列表
假设这个列表中的所有对象都有一个"external__c“字段。如何告诉visualforce呈现此字段?使用{!obj.external__c}将不起作用,因为它是sObject。
发布于 2011-09-08 07:39:15
如果您有一个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%确定我在getter上的语法是否正确,但已经很接近了;)希望这能帮助你实现你想要的!
发布于 2011-09-08 01:40:49
假设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];好吧,我要去喝一品脱了。希望这能有所帮助!
https://stackoverflow.com/questions/7335540
复制相似问题