function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Kalyan G.Kalyan G. 

selectList not returning value to Controller

Dunno what's wrong here .. the first selectList is returning value where as the second one is not. The second selectList values are dependent on 1st selectList. And it works, but the second selectList returns a NULL.

In the code below, the "selSubReason" returns NULL.

VF Page:
<apex:page controller="callThisController" title="My Page">
	<apex:form id="theForm">
		<apex:pageBlock mode="maindetail">
			<apex:pageBlockSection columns="1">
	        	<apex:pageBlockTable value="{!wrappers}" var="wrapper">
	        		...
	        		<apex:column headerValue="List 1">
	                    <apex:selectList id="Rsn" size="1" value="{!wrapper.selReason}">
	                    	<apex:actionSupport event="onchange" action="{!checkReason}" reRender="SubRsn"/>
	                    	<apex:selectOptions value="{!wrapper.lstReason}" />
	                    </apex:selectList>
                    </apex:column>
                    <apex:column headerValue="List 2">
                    	<apex:outputPanel id="SubRsn">
		                    <apex:selectList size="1" value="{!wrapper.selSubReason}" rendered="{!wrapper.rndrSRsn}">
		                    	<apex:selectOptions value="{!wrapper.lstSubReason}" />
		                    </apex:selectList>
	                    </apex:outputPanel>
                    </apex:column>
	        		...
	        	</apex:pageBlockTable>
	        </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Cntroller:
public with sharing class callThisController {

    public List<LineWrapper>  wrappers {get;set;}

    public callThisController() {

        wrappers = new List<LineWrapper>();
        myItems = [SELECT myString,........ FROM my_custom_object__c];
        for(my_custom_object__c it : this.myItems)
        {
            wrappers.add(new LineWrapper(myString));

        }
    }//cntrl

    public void checkReason(){
        
        for (LineWrapper wrap : wrappers) 
        {
            wrap.rndrSRsn = false;
                if (wrap.selReason == 'Reason 1')
                {
                    wrap.lstSubReason = new List<SelectOption>();
                    wrap.lstSubReason.add(new SelectOption('','-- Select Return SubReason --'));
                    wrap.lstSubReason.add(new SelectOption('Sub Reason 10','Sub Reason 10'));
                    wrap.lstSubReason.add(new SelectOption('Sub Reason 11','Sub Reason 11'));
                    wrap.rndrSRsn = true;
                }

                if (wrap.selReason == 'Reason 2')
                {
                    wrap.lstSubReason = new List<SelectOption>();
                    wrap.lstSubReason.add(new SelectOption('','-- Select Return SubReason --'));
                    wrap.lstSubReason.add(new SelectOption('Sub Reason 20','Sub Reason 20'));
                    wrap.lstSubReason.add(new SelectOption('Sub Reason 21','Sub Reason 21'));
                    wrap.rndrSRsn = true;
                }

                if (wrap.selReason == 'Reason 3')
                {
                    wrap.lstSubReason = new List<SelectOption>();
                    wrap.lstSubReason.add(new SelectOption('','-- No Return SubReason --'));
                    wrap.rndrSRsn = false;
                }

                if (wrap.selReason == 'Reason 4')
                {
                    wrap.lstSubReason = new List<SelectOption>();
                    wrap.lstSubReason.add(new SelectOption('','-- Select Return SubReason --'));
                    wrap.lstSubReason.add(new SelectOption('Sub Reason 40','Sub Reason 40'));
                    wrap.lstSubReason.add(new SelectOption('Sub Reason 41','Sub Reason 41'));
                    wrap.rndrSRsn = true;
                }
            } 
        }
    }//checkReturnReason
    
    public class LineWrapper
    {
        public Boolean rndrSRsn{get;set;}
        public String myString{get;set;}
        public List<SelectOption> lstReason{get;set;}
        public List<SelectOption> lstSubReason{get;set;}
        public String selReason{get;set;}    // <= This retuns correct value
        public String selSubReason{get;set;} // <= This returns NULL

        public LineWrapper(String myString)
        {
            rndrSRsn = false;
            
            this.wrapString = myString;
            this.lstSubReason = new List<SelectOption>();
            this.lstSubReason.add(new SelectOption('','-- No SubReason --'));

            lstReason = new List<SelectOption>();
            lstReason.add(new SelectOption('','-- Select Return Reason --'));
     	    lstReason.add(new SelectOption('Return 1','Reason 01'));
            lstReason.add(new SelectOption('Return 1','Reason 02'));
            lstReason.add(new SelectOption('Return 1','Reason 03'));
            lstReason.add(new SelectOption('Return 1','Reason 04'));
        }//contructor
    }//LineWrapper
}//cls