I have bee trying to render a field based on lead status value like 'Cancel/Rejected'. if i select Cancel  value it should display field A, if i select value Reject it should display field B. please take a look at my visualforce page. What am i missing ?

vfpage

                    <apex:actionRegion >
                        <apex:selectList id="chooseColor" value="{!str}" size="1">
                            <apex:selectOption itemValue="Approved" itemLabel="Approved"/>
                            <apex:selectOption itemValue="Rejected" itemLabel="Rejected"/>
                            <apex:selectOption itemValue="Cancel" itemLabel="Cancel"/>
                            <apex:actionSupport event="onchange" reRender="col"/>
                        </apex:selectList> 
                    </apex:actionRegion> 
                    </apex:column>
                    <apex:column id="col" headerValue="Cancel Reason" > 
                        <apex:inputField value="{!le.Lead_Cancel}" />  
                     </apex:column>
                     <apex:column id="col2" headerValue="Reject Reason" > 
                         <apex:inputField value="{!le.Rejected_Details__c}" />  
                     </apex:column>
EDIT : MY CONTROLLER 
Parents component of selectList : {!str}
public string str{get;set;}

 public NGCC_LeadMassList(ApexPages.StandardSetController Controller){
              lstLead = [SELECT Id,Name,Status, Cancel_Reason__c,Rejected_Reason_c FROM Lead WHERE ID IN:Controller.getSelected()];
        if(lstLead!=null && lstLead.size()>0){
            for(Lead obj : lstLead){
                obj.Status = 'Approved';
            }
        }    
    }
    public pageReference save1()
    {
    
     if(lstLead!=null)
       {
        for(Lead l:lstLead)
        {
            l.Status=str;
            records.add(l);
        }
        update records ;
       }