Nicht zum binden der Komponente Attribut mit controller
Ich versuche zu entwickeln, die eine benutzerdefinierte visualforce-Komponente, die es dauert, um ein Attribut aus einer visuellen Kraft, die Seite. Ich brauche Zugriff auf das Attribut im controller-Konstruktor übergeben, so dass ich können bringt einige Datensätze aus der Datenbank und ich muss anzeigen, die Datensätze in der Komponente. Aber das problem ist, dass ich nicht die erste Attribut-Wert-Controller.
Siehe unten im code, das problem zu verstehen klar..
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);
}
}
Komponente :
<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-Seite :
<apex:page >
<c:AdditionalQuestionComponent CRFType="STE" />
</apex:page>
Dank,
Vivek
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setter-Methoden auf die Attribute in einem VF-Komponente angezeigt werden aufgerufen, nachdem der Konstruktor zurückgegeben hat, leider. Hier ist eine alternative Lösung für Ihren controller verwendet, die eine getter-Methode zum Auffüllen Ihrer Liste (das würde aufgerufen werden, nachdem Ihre CRFType member-variable gesetzt wurde):
Ich glaube, das Problem hier ist, dass Sie erwarten, dass die member-variable auf einen Wert innerhalb des Konstruktors — der Haken ist, dass die Instanz der Klasse wird gebaut! Es existiert noch nicht und so gibt es keine Möglichkeit, dass eine nicht-statische member-variable einen Wert erhalten kann, vor.
Tun, anstatt die Abfrage im Konstruktor, können Sie Ihre eigenen getter für
lstAddQue
tun und die Abfrage in der es, wenn Sie die Daten benötigen. Natürlich können Sie Zwischenspeichern möchten, den Wert, so dass die Abfrage nicht jedes mal, aber von den blicken der Dinge, die nicht sein hier relevant.