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

使用Salesforce Visualforce创建表单保存时遇空对象引用错误求助

问题排查:Visualforce表单保存时的空对象引用错误

报错信息:

Attempt to de-reference a null object
Error is in expression '{!save}' in component apex:commandButton in page contract_object: Class.ContractController.save: line 7, column 1
An unexpected error has occurred. Your development organization has been notified.

Visualforce页面代码

<apex:page Controller="ContractController" sidebar="false" showHeader="false">
    <apex:form >
        <apex:pageBlock title="Contract Form">
            <apex:pageBlockSection columns="1">
                <apex:inputField value="{!conObj.Name}"/>
                <apex:inputField value="{!conObj.First_Name__c}" />
                <apex:inputField value="{!conObj.Last_Name__c}" />
                <apex:inputField value="{!conObj.Phone_Number__c}" />
                <apex:inputField value="{!conObj.Address__c}" />
                <apex:inputField value="{!conObj.Email__c}" />
                <apex:commandButton value="Save" action="{!save}"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Apex控制器代码

public with sharing class ContractController {
    public Contract__c conObj {get; set;}
    public void newContract() {
        conObj = new Contract__c();
    }
    public void save() {
        insert conObj;
    }
}

问题原因与解决方案

原因

conObj对象未被初始化:你定义了newContract()方法来创建Contract__c实例,但这个方法从未被调用过。当点击保存按钮执行save()方法时,conObj仍然是null,触发空对象引用错误。

解决方法(二选一即可)

方法1:在控制器构造方法中初始化对象

修改控制器,添加构造方法,确保页面加载时自动初始化conObj:

public with sharing class ContractController {
    public Contract__c conObj {get; set;}

    // 构造方法,控制器实例化时自动执行
    public ContractController() {
        conObj = new Contract__c();
    }

    public void save() {
        insert conObj;
    }
}

方法2:通过页面action属性触发初始化

修改Visualforce页面的apex:page标签,添加action属性调用newContract()方法:

<apex:page Controller="ContractController" sidebar="false" showHeader="false" action="{!newContract}">
    <!-- 原有表单内容保持不变 -->
</apex:page>

两种方法都能确保conObj在保存前被正确实例化,避免空对象引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:10:28