在VF页面上显示SubQuery

时间:2014-07-09 19:55:13

标签: salesforce visualforce apex

任何人都可以帮忙吗

notices =[SELECT Description__c,Id,Name__c,Notice_Date__c, (select id,Name from Attachment), FROM Notice__c];  

我有附件的对象通知

它有一个附件,我想在vf页面上放这样的东西

通知名称
通知说明
通知日期

与该通知记录相关联的附件名称或ID


我的控制器

public class On_StudentNoticeController {
    public List<Notice__c> notices{get;set;}

    public On_StudentNoticeController (){
        notices=new List<Notice__c>();
    }

    public PageReference Onpageload() {
        notices = [SELECT Id,  Name__c, Description__c,Notice_Date__c,
            (SELECT Id, Name FROM Attachments) 
        FROM Notice__c 
        ORDER BY Notice_Date__c DESC NULLS FIRST];
    }
}

我当前问题的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:0)

编辑#2

您似乎正在尝试迭代空列表。你的执行顺序是错误的,你的生活过于复杂。虽然我会说这应该是一个运行时错误,而不是编译一个,很有趣。也许编译器变得更聪明了。

这就是您的代码无效的原因:

  1. 构造函数(On_StudentNoticeController ())触发。它创建了空列表。
  2. 页面被渲染,Visualforce将显示一个空列表。
  3. 您正在调用页面操作来填充通知列表,但为时已晚。他们将会&#34;当页面重新加载时,它最初会为空。
  4. 试试这样吗?我真的用附件复制了我的自定义对象的代码。你应该只需改变几个对象和字段名称并且很好用:

    public class accswithattachments {
    
        public List<SF_Payable__c> accs {get; private set;}
    
        public accswithattachments(){
            accs = [SELECT Id, Name, LastModifiedDate, 
                (SELECT Id, Name FROM Attachments)
                FROM SF_Payable__c
                ORDER BY CreatedDate
                LIMIT 1000];
        }
    }
    
    <apex:page controller="accswithattachments" >
    <ol>
        <apex:repeat value="{!accs}" var="a">
            <li><apex:outputField value="{!a.Name}" /><br/>
                <apex:outputField value="{!a.LastModifiedDate}" /><br/>
    
                <apex:dataList value="{!a.Attachments}" var="attachment">
                   <apex:outputText value="{!attachment.Name}"/>
                </apex:dataList>
                <br/>
            </li>
        </apex:repeat>
    </ol>
    </apex:page>
    

    输出(当然是我的数据):

    enter image description here

    我很好奇为什么它会给你编译错误。我想我知道它为什么抱怨(列表是空的)。但还是......


    编辑#1 以回复评论:

    这对我有用。它的帐户附件(因为我没有你的对象)。它甚至不使用Apex控制器。

    <apex:page standardController="Account" recordSetVar="accounts">
    <ol>
        <apex:repeat value="{!accounts}" var="acc">
            <li><apex:outputField value="{!acc.Name}" /><br/>
                <apex:outputField value="{!acc.Description}" /><br/>
                <apex:outputField value="{!acc.LastModifiedDate}" /><br/>
    
                <apex:dataList value="{!acc.Attachments}" var="attachment">
                   <apex:outputText value="{!attachment.Name}"/>
                </apex:dataList>
                <br/>
            </li>
        </apex:repeat>
    </ol>
    </apex:page>
    

    原始回答

    您的查询无法编译,我认为它应该与此类似:

    SELECT Id, Name__c, Description__c,Notice_Date__c,
        (SELECT Id, Name FROM Attachments)
    FROM Notice__c
    

    一旦你开始工作,你应该阅读有关循环集合的Visualforce标签(apex:dataList,apex:dataTable,apex:pageBlockTable,apex:repeat ...)。根据您希望输出的显示方式使用其中一个

    这样的东西?

    <apex:repeat value="{!notices}" var="notice">
        <p>
            <apex:outputField value="{!notice.Name__c}" /><br/>
            <apex:outputField value="{!notice.Description__c}" /><br/>
            <apex:outputField value="{!notice.Notice_Date__c}" /><br/>
        </p>
        <apex:dataList value="{!notice.Attachments}" var="attachment">
            <apex:outputText value="{!attachment.Name}"/>
        </apex:dataList>
    </apex:repeat>