<apex:component id="this" controller="MySiteInputAccountIdCtrl"
selfClosing="true">
<apex:attribute name="value" type="Id"
description="Account Id to pass back to the page."
assignTo="{!accountId}"
required="true"/>
<apex:inputText id="accountIdIText"
value="{!accountId}"/>
</apex:component>
accountId
was a simple property with a vanilla pair of getter and setter methods. When the component is rendered as a component like <c:MySiteInputAccountId value="{!contact.AccountId}>
, contact.AccountId
would not update no matter what I typed into the input field.Several hours later, I took a look back at a custom component that worked (and was also created by me after a similar bout of confusion)... And it turns out that I was writing the input to the wrong object. The correct component markup is as follows:
<apex:component id="this" controller="MySiteInputAccountIdCtrl"
selfClosing="true">
<apex:attribute name="value" type="Id"
description="Account Id to pass back to the page."
assignTo="{!accountId}"
required="true"/>
<apex:inputText id="accountIdIText"
value="{!value}"/>
</apex:component>
I can't believe I forgot this resolution to a 3-hour frustration almost immediately... just to experience a new 6-hour frustration on the same topic. Hopefully writing this down will help me remember my lesson and avoid a third incident.