Visualforce筛选相关列表错误:无法显示内容:尝试取消引用空对象

时间:2015-08-31 23:38:15

标签: controller salesforce visualforce

我正试图在机会上显示合约清单。该列表应包括与机会账户或其父账户相关的任何合同。尽管测试SOQL返回2个合同记录的事实,但我得到错误:

  

无法显示内容:尝试取消引用空对象

以下是visualforce页面代码:

<apex:page standardController="Opportunity" extensions="RelatedContracts" tabStyle="Opportunity">
    <apex:form>
        <apex:pageBlock title="Contracts List" id="ContractId">

            <apex:pageBlockTable value="{!contracts}" var="c">
                <apex:column headerValue="ContractName">
                    <apex:outputLink value="{!URLFOR('/')}{!c.Id}" target="_blank">{!c.ContractNumber}
                    </apex:outputLink>
                </apex:column>
                <apex:column value="{!c.Status}" />
                <apex:column value="{!c.StartDate}" />
                <apex:column value="{!c.Enddate}" />
                <apex:column value="{!c.SpecialTerms}" />
                <apex:column value="{!c.Description}" />

            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>

</apex:page>

这是扩展类:

public with sharing class RelatedContracts {

    public Opportunity opp {
        get;
        set;
    }
    public List < Contract > contracts {
        get;
        set;
    }

    public RelatedContracts(ApexPages.StandardController controller) {
        opp = (Opportunity) controller.getRecord();

    }

    Opportunity oppInfo = [SELECT AccountId from Opportunity WHERE id = : opp.Id];
    Account acct = [SELECT Id, ParentId from Account WHERE id = : oppInfo.AccountId];

    public List < Contract > getContracts() {
        contracts = new List < Contract > ();
        contracts = [SELECT Id, RecordTypeId, Status, ContractNumber, StartDate, EndDate, SpecialTerms, Description FROM Contract
            WHERE AccountId = : opp.AccountId OR AccountId = : acct.ParentId
        ];
        System.debug('ContractList' + contracts);
        if (contracts.size() > 0) {
            return contracts;
        } else
            return null;

    }
}

1 个答案:

答案 0 :(得分:0)

Plz尝试在类中定义oppInfo和acct以及null。在构造函数中使用soql设置值。 在getContracts()中使用oppInfo而不是opp变量。