如何在Visualforce页面显示Apex控制器查询的子对象字段?
解决Visualforce页面展示子查询字段的问题
第一步:确认Apex控制器的子查询正确性
首先确保控制器查询里的子对象关系名称和字段选取正确,示例代码如下:
public class FormController { public FormularioDeVisita__c visitaRecord {get; set;} public FormController() { // 注意:FormularioVisitaChild__r是父到子的关系API名称,需与系统内实际名称一致 visitaRecord = [SELECT Id, Name, (SELECT Id, CampoExemplo1__c, CampoExemplo2__c FROM FormularioVisitaChild__r) FROM FormularioDeVisita__c WHERE Id = ApexPages.currentPage().getParameters().get('id')]; } }
第二步:在Visualforce中遍历子对象列表
子查询返回的是sObject列表,无法直接像父对象字段那样调用,必须用<apex:repeat>标签遍历输出:
<apex:page controller="FormController"> <!-- 父对象字段展示 --> <div> <strong>Nome da Visita:</strong> {!visitaRecord.Name} </div> <!-- 子对象字段展示 --> <div style="margin-top:20px;"> <h3>Itens do Formulário</h3> <table border="1" cellpadding="5"> <thead> <tr> <th>Campo Exemplo 1</th> <th>Campo Exemplo 2</th> </tr> </thead> <tbody> <!-- 遍历子对象列表 --> <apex:repeat value="{!visitaRecord.FormularioVisitaChild__r}" var="childItem"> <tr> <td>{!childItem.CampoExemplo1__c}</td> <td>{!childItem.CampoExemplo2__c}</td> </tr> </apex:repeat> <!-- 处理无子记录的情况 --> <apex:outputPanel rendered="{!empty(visitaRecord.FormularioVisitaChild__r)}"> <tr> <td colspan="2" style="text-align:center;">Nenhum item encontrado</td> </tr> </apex:outputPanel> </tbody> </table> </div> </apex:page>
关键注意事项
- 关系名称验证:
FormularioVisitaChild__r是父对象到子对象的子关系API名称,可在Salesforce设置中找到子对象的父查找字段,查看其「Child Relationship Name」后加上__r后缀得到,名称错误会导致无法获取子数据。 - 字段权限:确保当前用户对子对象的展示字段有读取权限,否则字段会显示为空。
- 字段选取:子查询中必须明确列出要展示的所有子对象字段,不能使用
SELECT *的方式。
内容的提问来源于stack exchange,提问作者Igor Guedes
相关产品推荐
相关产品推荐

