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

Regording wrapper class



I am new to wrapper classes.I wanted to know on which situations we will use wrapper classes.

I am using the following code.But if i check the check boxes its not displaying only those records.


Here is my code:


public class wrapperClassController {

    //Our collection of the class/wrapper objects cContact

    public List<cContact> contactList {get; set;}


    //This method uses a simple SOQL query to return a List of Contacts

    public List<cContact> getContacts() {

        if(contactList == null) {

            contactList = new List<cContact>();

            for(Contact c : [select Id, Name, Email, Phone from Contact limit 10]) {

                // As each contact is processed we create a new cContact object and add it to the contactList

                contactList.add(new cContact(c));



        return contactList;



    public PageReference processSelected() {


                //We create a new list of Contacts that we be populated only with Contacts if they are selected

        List<Contact> selectedContacts = new List<Contact>();


        //We will cycle through our list of cContacts and will check to see if the selected property is set to true, if it is we add the Contact to the selectedContacts list

        for(cContact cCon : getContacts()) {

            if(cCon.selected == true) {





        // Now we have our list of selected contacts and can perform any type of logic we want, sending emails, updating a field on the Contact, etc

        System.debug('These are the selected Contacts...');
        for(Contact con : selectedContacts) {



        return null;



    // This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Contact and a Boolean value

    public class cContact {

        public Contact con {get; set;}

        public Boolean selected {get; set;}


        //This is the contructor method. When we create a new cContact object we pass a Contact that is set to the con property. We also set the selected value to false

        public cContact(Contact c) {

            con = c;

            selected = false;





Vf page:


<apex:page controller="wrapperClassController">

    <apex:form >

        <apex:pageBlock >

            <apex:pageBlockButtons >

                <apex:commandButton value="Process Selected" action="{!processSelected}" rerender="table"/>


            <!-- In our table we are displaying the cContact records -->

            <apex:pageBlockTable value="{!contacts}" var="c" id="table">

                <apex:column >

                    <!-- This is our selected Boolean property in our wrapper class -->

                    <apex:inputCheckbox value="{!c.selected}"/>


                <!-- This is how we access the contact values within our cContact container/wrapper -->

                <apex:column value="{!c.con.Name}" />

                <apex:column value="{!c.con.Email}" />

                <apex:column value="{!c.con.Phone}" />






can any one guide me...


Thanks in advance...




It is sometimes easier to deal with primitives as objects. Moreover most of the collection classes store objects and not primitive data types. And also the wrapper classes provide many utility methods also. Because of these reasons we need wrapper classes. And since we create instances of these classes we can store them in any of the collection classes and pass them around as a collection. Also we can pass them around as method parameters where a method expects an object.


In your code when you selecting the contact check box and click on the Process Selected button selected contact will display in the system debug.


 Did this answer your question? If not, let me know what didn't work, or if so, please mark it solved. 




Thanks for your reply,


I check the contact names again i clicked on ProcessSelected button.But still it is in same page only.Actully it should process only those records which i selected right....