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
bharath kumar 52bharath kumar 52 

Show/Hide a section of a vf page based on picklist values

Hi Guys,
Below is the code of my VF page and my controller and i am getting a null pointer exception.I am new to apex and VF development .
Please let me know where i am going wrong and help me in this regard.
Thanks in anticipation.

VF Page :


<apex:page controller="ShowHideController"> <!-- controller="AccountController" -->
<apex:form >
<apex:pageBlock title="Select the options"> Vehicle Names&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <apex:selectList value="{!selectedVehicleId}" size="1">
<apex:selectOptions value="{!VehicleType}"/>
<apex:actionSupport event="onchange" reRender="a"/>
</apex:selectList> Available parts &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<apex:pageBlockSection id="a">
<apex:selectList value="{!selectedBikePartId}" size="5">
<apex:selectOptions value="{!BikeParts}"/>
</apex:selectList>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>

Controller :
public class ShowHideController {
    public String selectedVehicleId{get;set;} 
    public String selectedBikePartId{get;set;}
     // this var is available only in the view and not seen in the
    //  controller methods below
    
    
    public ShowHideController(){
        
        
        
    }
    
    public List<SelectOption> getVehicleType() {
                List<SelectOption> vehicletypelist= new List<SelectOption>();
                  vehicletypelist.add( new SelectOption('','--Select--'));
                  for( Vehicle__c ve : [select Id,VehicleType__c from Vehicle__c ]) {
                          vehicletypelist.add( new SelectOption(ve.Id,ve.VehicleType__c));
                  }
                 return vehicletypelist;
           }
    public List<SelectOption> getBikeParts(){
        List<SelectOption> bikepartlist=new List<SelectOption>();
        List<SelectOption> options= new List<SelectOption>();
            if(selectedVehicleId!=null && selectedVehicleId=='Bike'){
                for(Vehicle__c ve2:[select Id,Bike_parts_available__c from Vehicle__c where VehicleType__c=:selectedVehicleId ]){
                    bikepartlist.add(new SelectOption(ve2.Id,ve2.Bike_parts_available__c));
                    
                }
                }
                 else
                    {
                        bikepartlist.add( new SelectOption('--None--','--None--'));
                    }
            
        
        return bikepartlist;
    }

//Below code is not implemented
    public List<SelectOption> getCarParts(){
        List<SelectOption> carpartlist=new List<SelectOption>();
        List<SelectOption> options= new List<SelectOption>();
            if(selectedVehicleId!=null && selectedVehicleId=='car'){
                for(Vehicle__c ve3:[select Id,Car_parts_available__c from Vehicle__c where VehicleType__c=:selectedVehicleId]){
                    carpartlist.add(new SelectOption(ve3.Id,ve3.Car_parts_available__c));
                    
                }     
            }
        
        return carpartlist;
    }
    
}
 
salesforce mesalesforce me
hi check this once....
 
<apex:page controller="sampleCon">
  <apex:form>
    <apex:selectList value="{!country}" multiselect="false" size="1">
     <apex:selectOptions value="{!items}"/>
     <apex:actionSupport event="onchange" rerender="out1,out2"/>
   </apex:selectList>

    <apex:pageBlock >  
      <apex:pageBlockSection id="out1" >
        <apex:pageBlockSectionItem rendered="{!IF(country == 'None', false , true)}">
          Customize your input Text1 <apex:inputtext></apex:inputtext>
        </apex:pageBlockSectionItem>
        </apex:pageBlockSection>
        
        <apex:pageBlockSection id="out2" >
        <apex:pageBlockSectionItem rendered="{!IF(country == 'None', false , true)}">
          Customize your input Text2 <apex:inputtext></apex:inputtext>
        </apex:pageBlockSectionItem>
      </apex:pageBlockSection>
     </apex:pageBlock>
  </apex:form>
</apex:page>
 
public class sampleCon {
    String country = 'None';
        
    public PageReference test() {
        return null;
    }
        
    public List<SelectOption> getItems() {
        List<SelectOption> options = new List<SelectOption>();
        options.add(new SelectOption('None','None'));
        options.add(new SelectOption('Commercial','Commercial'));
        options.add(new SelectOption('Rolloff','Rolloff'));
        return options;
    }
        
    public String getCountry() {
        return country;
    }
        
    public void setCountry(String country) {
        this.country = country;
    }
}


 
bharath kumar 52bharath kumar 52
Tried it but it isn't working in this scenario.

Thanks
mritzimritzi
Try following code:

Apex
public class ShowHideController {
    public String selectedVehicleId{get;set;} 
    public String selectedBikePartId{get;set;}
    // this var is available only in the view and not seen in the
    //  controller methods below
    
	//I diagree with your comment posted above, these two variables are definitely accessible in the controller
    
	
    public ShowHideController(){
       
    }
    
    public List<SelectOption> getVehicleType() {
        List<SelectOption> vehicletypelist= new List<SelectOption>();
        vehicletypelist.add( new SelectOption('','--Select--'));
        for( Vehicle__c ve : [select Id,VehicleType__c from Vehicle__c ]) {
            vehicletypelist.add( new SelectOption(ve.Id,ve.VehicleType__c));
        }
        return vehicletypelist;
    }
    public List<SelectOption> getBikeParts(){
        List<SelectOption> bikepartlist=new List<SelectOption>();
        List<SelectOption> options= new List<SelectOption>();
        if(selectedVehicleId!=null && selectedVehicleId=='Bike'){
            for(Vehicle__c ve2:[select Id,Bike_parts_available__c from Vehicle__c where VehicleType__c=:selectedVehicleId ]){
                bikepartlist.add(new SelectOption(ve2.Id,ve2.Bike_parts_available__c));
                  
            }
        }
		else
			bikepartlist.add( new SelectOption('--None--','--None--'));
        return bikepartlist;
    }

	//Below code is not implemented
    public List<SelectOption> getCarParts(){
        List<SelectOption> carpartlist=new List<SelectOption>();
        List<SelectOption> options= new List<SelectOption>();
            if(selectedVehicleId!=null && selectedVehicleId=='car'){
                for(Vehicle__c ve3:[select Id,Car_parts_available__c from Vehicle__c where VehicleType__c=:selectedVehicleId]){
                    carpartlist.add(new SelectOption(ve3.Id,ve3.Car_parts_available__c));
                    
                }     
            }
        
        return carpartlist;
    }
    
}

VF
<apex:page controller="ShowHideController"> <!-- controller="AccountController" -->
	<apex:form >
		<apex:pageBlock title="Select the options"> 
			Vehicle Names&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
			<apex:selectList value="{!selectedVehicleId}" size="1" multiselect="false">
				<apex:selectOptions value="{!VehicleType}"/>
				<apex:actionSupport event="onchange" reRender="a"/>
			</apex:selectList>
			<apex:pageBlockSection id="a" rendered="{!selectedVehicleId!=null}">
				Available parts &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
				<apex:selectList value="{!selectedBikePartId}" size="5" multiselect="false">
					<apex:selectOptions value="{!BikeParts}"/>
				</apex:selectList>
			</apex:pageBlockSection>
		</apex:pageBlock>
	</apex:form>
</apex:page>