You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署VF页面遇Unknown property 'VisualforceArrayList.EHS_Task__c'错误求助

错误原因分析
  • 变量类型不匹配:控制器里的getEHS是List<EHS_Pre_Job_Brief__c>列表类型,但Visualforce页面直接写{!getEHS.EHS_Task__c},试图让列表去调用单个对象的属性——列表本身没有EHS_Task__c这个属性,只有列表里的单个记录才有,这是报错的直接原因。
  • 构造函数逻辑漏洞:
    • 用标准控制器打开页面时,会触发带参数的构造函数,但这个函数里没初始化getEHS,导致列表为空。
    • 无参构造函数里的id初始是空字符串,执行SOQL时where id= :id查不到任何数据,getEHS会是个空列表。
修复方案

方案一:把getEHS改成单个对象(更适配当前场景,因为SOQL加了limit 1)

修改控制器代码:

public class ES_EHSReportGeneration {
    public Apexpages.Standardcontroller cntrl;     
    public PageReference page; 
    public String id = '';
    // 改为单个对象类型,而非列表
    public EHS_Pre_Job_Brief__c getEHS {get;set;}
 
    public ES_EHSReportGeneration(ApexPages.StandardController controller) {
        this.cntrl = controller; 
        this.page = ApexPages.currentPage();
        this.id = page.getParameters().get('id');
        // 初始化getEHS,先判断id非空再查询
        if(String.isNotBlank(id)){
            getEHS = [Select id, EHS_Task__c from EHS_Pre_Job_Brief__c where id= :id limit 1];
        }
    }   

    public ES_EHSReportGeneration(){
        this.id = ApexPages.currentPage().getParameters().get('id');
        if(String.isNotBlank(id)){
            getEHS = [Select id, EHS_Task__c from EHS_Pre_Job_Brief__c where id= :id limit 1];
        }
    }
}

页面代码不用改,现在getEHS是单个对象,{!getEHS.EHS_Task__c}可以正常访问属性。

方案二:保留列表类型,页面访问列表第一个元素

如果必须保留getEHS为列表,修改Visualforce页面的value属性:

<input type="text" name="task" id="task" class="frminput" value = "{!getEHS[0].EHS_Task__c}"></input>

同时要按照方案一的方式修改控制器的构造函数,确保getEHS被正确初始化(否则getEHS[0]会触发索引越界错误)。

额外优化建议
  • 建议在执行SOQL前先判断id是否为空,避免无效查询。
  • 使用标准控制器时,也可以直接通过cntrl.getId()获取当前记录ID,不用手动从参数取,比如:
    getEHS = [Select id, EHS_Task__c from EHS_Pre_Job_Brief__c where id= :cntrl.getId() limit 1];
    

内容的提问来源于stack exchange,提问作者Harsh Shukla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:55:19