繁体   English   中英

在VF页面上显示子查询

[英]Displaying SubQuery on VF Page

有人能帮忙吗

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];
    }
}

我当前问题的屏幕截图:

在此处输入图片说明

编辑#2

看来您要遍历空列表。 您的执行顺序是错误的,您的生活过于复杂。 尽管我会说这应该是运行时错误,而不是编译错误,但很有趣。 也许编译器变得更聪明了。

这就是您的代码无法正常工作的原因:

  1. 构造函数( On_StudentNoticeController () )触发。 它创建一个空列表。
  2. 页面被渲染后,Visualforce将显示一个空列表。
  3. 您正在调用页面操作来填充通知列表,但为时已晚。 当页面重新加载时,它们将“在那里”,但最初将为空。

这样尝试? 我从字面上复制了带有附件的自定义对象的代码。 您只需要更改几个对象和字段名称,就可以了:

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>

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

在此处输入图片说明

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


编辑#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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM