我正在尝试开发一个visualforce自定义组件,它从一个视觉力量页面获取一个属性。我需要访问控制器的构造器中的该属性,以便从数据库中获取一些记录,并且需要在组件中显示这些记录。但问题是我没有在Controller中获得属性值。
请参阅下面的代码以清楚地了解该问题。
控制器:
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>VisualForce页面:
<apex:page >
<c:AdditionalQuestionComponent CRFType="STE" />
</apex:page>谢谢,Vivek
发布于 2012-07-19 21:04:54
不幸的是,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-19 21:06:14
我相信这里的问题是你期望成员变量在构造函数中有一个值--但问题是类的实例正在被构造!它还不存在,所以不可能事先给非静态成员变量赋值。
不是在构造函数中执行查询,而是为lstAddQue指定自己的getter,并在需要数据时在其中执行查询。当然,您可能希望缓存值,这样查询就不会每次都运行,而是从这里看起来不相关的东西。
https://stackoverflow.com/questions/11559619
复制相似问题