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>

VisualForce ページ:

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

ありがとう、ヴィベク

4

2 に答える 2

5

ここでの問題は、メンバー変数がコンストラクター内に値を持つことを期待していることだと思います。問題は、クラスのインスタンスが構築されていることです! まだ存在しないため、非静的メンバー変数に事前に値を与える方法はありません。

コンストラクターでクエリを実行する代わりに、独自のゲッターを指定してlstAddQue、データが必要なときにそこでクエリを実行します。もちろん、クエリが毎回実行されないように値をキャッシュすることもできますが、ここでは関係のないように見えます。

于 2012-07-19T13:06:13.563 に答える
2

残念ながら、VF コンポーネントの属性のセッター メソッドは、コンストラクターが戻った後に呼び出されるように見えます。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 に答える