5

我正在尝试开发一个从视觉力页面获取属性的视觉力自定义组件。我需要在控制器的构造函数中访问该属性,以便我可以从数据库中获取一些记录,并且我需要在组件中显示这些记录。但问题是我没有在控制器中获得属性值。

请参阅下面的代码以清楚地了解问题..

控制器 :

public with sharing class AdditionalQuestionController {
    public String CRFType {get;set;}
    public AdditionalQuestionController () {
        system.debug('CRFType : '+CRFType);
        List<AdditoinalQuestion__c> lstAddQues = [Select AddQues__c from AdditoinalQuestion__c wehre CRFType = :CRFType];
        system.debug('lstAddQue : '+lstAddQue);
    }
}

零件 :

<apex:component controller="AdditionalQuestionController" allowDML="true">
    <apex:attribute name="CRFType" description="This is CRF Type."  type="String" required="true" assignTo="{!CRFType}" />
        <apex:repeat value="{!lstAddQue}" var="que">
            {!que}<br />
        </apex:repeat>
</apex:component>

视觉力量页面:

 <apex:page >
    <c:AdditionalQuestionComponent CRFType="STE" />
</apex:page>

谢谢,维维克

4

2 回答 2

5

我相信这里的问题是您期望成员变量在构造函数中具有值 - 障碍是正在构造类的实例!它尚不存在,因此无法预先为非静态成员变量赋予值。

不要在构造函数中进行查询,而是指定自己的 getterlstAddQue并在需要数据时在其中进行查询。当然,您可能希望缓存该值,以便查询不是每次都运行,但从看起来与此处无关的事物来看。

于 2012-07-19T13:06:13.563 回答
2

不幸的是,VF 组件中的属性上的 Setter 方法似乎在构造函数返回后被调用。这是您的控制器的另一种解决方案,它使用 getter 方法来填充您的列表(将在您的 CRFType 成员变量设置后调用):

public with sharing class AdditionalQuestionController {
    public String CRFType {set;}
    public AdditionalQuestionController () {
        system.debug('CRFType : '+CRFType); // this will be null in the constructor
    }
    public List<AdditoinalQuestion__c> getLstAddQue() {
        system.debug('CRFType : '+CRFType); // this will now be set
        List<AdditoinalQuestion__c> lstAddQues = [Select AddQues__c from AdditoinalQuestion__c wehre CRFType = :CRFType];
        system.debug('lstAddQue : '+lstAddQue);
        return lstAddQue;
    }
}
于 2012-07-19T13:04:53.723 回答