Take the 2-minute tour ×
Salesforce Stack Exchange is a question and answer site for Salesforce administrators, implementation experts, developers and anybody in-between. It's 100% free, no registration required.

I have below apex page which uses a custom component

<apex:page >
    <c:compo value="hello"></c:compo>
</apex:page>

Component is:

<apex:component controller="compocontroller">
    <apex:attribute name="value" type="string" description="tu" assignTo="{!valueclassvar}"/>
</apex:component>

Component Controller class is :

public class compocontroller {

    public  string valueclassvar { 
        get {
            system.debug('getmethod '+valueclassvar); 
            return valueclassvar;
        }
        set { 
            system.debug('setmethodfirst'+ valueclassvar);
            valueclassvar = value;
            system.debug('setmethod'+ valueclassvar);
        }
    }

    public compocontroller() {
        system.debug('constructor' + valueclassvar);
    }
}

When i execute the page,,and check debug log i can see

07:28:54.050 (50550965)|USER_DEBUG|[4]|DEBUG|getmethod null
07:28:54.050 (50561692)|SYSTEM_METHOD_EXIT|[4]|System.debug(ANY)
07:28:54.050 (50572663)|METHOD_EXIT|[7]|01pi0000005trqA|compocontroller.__sfdc_valueclassvar()
07:28:54.050 (50586810)|SYSTEM_METHOD_ENTRY|[7]|System.debug(ANY)
07:28:54.050 (50595306)|USER_DEBUG|[7]|DEBUG|constructornull
07:28:54.050 (50601192)|SYSTEM_METHOD_EXIT|[7]|System.debug(ANY)
07:28:54.050 (50615792)|CODE_UNIT_FINISHED|compocontroller <init>
07:28:54.050 (50775094)|CODE_UNIT_STARTED|[EXTERNAL]|compocontroller set(valueclassvar,hello)
07:28:54.050 (50784120)|SYSTEM_MODE_ENTER|true
07:28:54.050 (50800173)|CODE_UNIT_STARTED|[EXTERNAL]|compocontroller set(valueclassvar,hello)
07:28:54.050 (50884027)|SYSTEM_METHOD_ENTRY|[4]|System.debug(ANY)
07:28:54.050 (50900069)|USER_DEBUG|[4]|DEBUG|setmethodfirstnull
07:28:54.050 (50906953)|SYSTEM_METHOD_EXIT|[4]|System.debug(ANY)
07:28:54.050 (50924161)|SYSTEM_METHOD_ENTRY|[4]|System.debug(ANY)
07:28:54.050 (50931797)|USER_DEBUG|[4]|DEBUG|setmethodhello

Why is getmethod getting executed before constructor?I thought as per order of execution its the constructors that gets executed first,followed by expression/attributes of component..am i missing anything>

share|improve this question

1 Answer 1

up vote 4 down vote accepted

Your constructor is getting called first. Look at your constructor, it references valueclassvar. At this point, it actually calls the getter for valueclassvar, writes the system debug in the valueclassvar getter, and then returns to the constructor after which it calls System.debug in the constructor.

Furthermore, your setter will be called after the constructor is called. The setter is invoked by the assignTo attribute in your element in the component. This tends to lead to much confusion with components, and often means writing any dependent logic in your setters or elsewhere.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.