Viv*_*vek 5 salesforce visualforce apex-code
我正在尝试开发一个Visualforce自定义组件,该组件从Visual Force页面获取属性。我需要在控制器的构造函数中访问该属性,以便可以从数据库中获取一些记录,并且需要在组件中显示这些记录。但是问题是我没有在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);
}
}
Run Code Online (Sandbox Code Playgroud)
零件 :
<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>
Run Code Online (Sandbox Code Playgroud)
VisualForce页面:
<apex:page >
<c:AdditionalQuestionComponent CRFType="STE" />
</apex:page>
Run Code Online (Sandbox Code Playgroud)
谢谢,Vivek
我相信这里的问题是,您期望成员变量在构造函数中具有一个值-缺点是正在构造类的实例!它尚不存在,因此无法为非静态成员变量赋予优先值。
无需在构造函数中执行查询,而是为您指定自己的getter lstAddQue并在需要数据时在其中进行查询。当然,您可能希望缓存该值,以使查询不会每次都运行,而是从与此处无关的事物外观开始。
不幸的是,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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10417 次 |
| 最近记录: |