+ Start a Discussion
anu deep 6anu deep 6 

visual force bugs need to be fixed

Hi salesforce experts,

I here by requesting you to  please help me in fixing following bugs.

current functionality:
==============
1.)If I deselet account records still opportunities and contact records are displaying.

required functionalitiy:
===============
1.)If I deselect account records related opportunities and contact records need to be disappear.
2.)If I select account records,related opportunities and contact records need to be display.

And also plese fix following bugs,

-->Even though I didn't select any account and selected opportunites and clicked on submit it is showing error message. If I select any account and select opportunites check box and click on submit, then only it should show the error message.

-->I need to display a blank table with "No Opportunites Found" message in case the selected accounts doesn't have any opportunities.
        The same is the case with contacts.
-->If click on next button  in accounts table, still It is displaying opportunities and contacts even though I didn't select anything.
       please help me to fix above bugs.

I here by providing code
==================
-->Apex class
--------------------
public class Acc_con_Opp_Details
{
    
    //list of collection of the wrapper class object
    public list<accountwrapper> actwrap           {set;get;}
    //list of collection of Account,contact and opportunity objects
    public list<Account>        accounts          {set;get;}
    public list<Account>        acts              {set;get;}
    public list<opportunity>    opts              {set;get;}
    public list<opportunity>    sopts             {set;get;}
    public list<contact>        cnts              {set;get;} 
    public list<contact>        snts              {set;get;}
    public boolean oppbox                         {set;get;}//used as check box for opportunity 
    public boolean conbox                         {set;get;}//used as check box for contact
    public boolean flag1                          {set;get;}//used in account page block  
    public boolean flag2                          {set;get;}//used in contact page block 
    public boolean flag3                          {set;get;}//used in opportunity page block
    //this variables are used for pagination purpose
    private integer totalRecs = 0;//stores no.of total records   
    private integer index = 0;//used for tracking offset
    private integer blockSize =5;//for setting size of page
   
    //in this constructor we are setting values to boolean values
    public Acc_con_Opp_Details()
    {
    flag1=true;
    flag2=false;
    flag3=false;
        totalRecs = [select count() from Account];//returns total no.of account records 
       getactwrap();//calling getactwrap method.
    }
    //this method displays first five records
    public void beginning()
    {
        oppbox=false;
        conbox=false;
        index = 0;
        getactwrap();
    }
    //this method displays prevoius records
     public void previous()
    {
        oppbox=false;
        conbox=false;
        index = index-blockSize;
        getactwrap();
    }
    //this method displays next records
   public void next()
    {
        oppbox=false;
        conbox=false;
        index = index+blockSize;
        getactwrap();
    }
    //this method displays last remaining records
 public void end()
    {
        oppbox=false;
        conbox=false;
        index = totalrecs - math.mod(totalRecs,blockSize);
        getactwrap();
    }  
    //this variable is used to enable or disable first and previous buttons
 public boolean prev{get
    {
        if(index == 0)
        return true;
        else
        return false;
    }  set;}
    //this variable is used to enable or disable next and last buttons
 public boolean nxt{get
    {
        if((index + blockSize) > totalRecs)
        return true;
        else
        return false;
    }   set;}
    //used to display opportunities and contacts w.r.t selected accounts
    public void  submit()
    {
        flag1=false;
        acts=new list<Account>();
        for(accountwrapper aw:actwrap)
           {
            if(aw.acflag){
                acts.add(aw.acc);
           }
    }
        
      //if we select contact check box,then it displays contacts for selected accounts 
      if(conbox)
      {
              snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
              if(snts.size()>0)
              {
              flag3=true;
              }
              else
              {
              flag3=true;
              ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
              }
         } 
      //if we select opportunity check box,then it displays opportunities for selected accounts
      if(oppbox)
        {       
            
      opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
      if(opts.size() >0)
      {
      flag2=true;
      }
      else
       {
       flag2=false;
       ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
       }
   } 
    }
    //hides contacts and shows opportunities related to accounts,when ever user selects only opportunities check box
    public void Hideandshowopp()
    {
   if(oppbox)
    {
     submit();
    }
    else
    {
     flag2=false;
    }
  }
 //hides opportunities and shows contacts related to accounts,when ever user selects only contats check box
  public void HideandshowCon()
    {
    if(conbox)
    {
     submit();
    }
    else
    {
     flag3=false;
    }
 }
  //This method uses a simple SOQL query to return a List of Accounts
     public void getactwrap(){
         accounts = Database.Query('SELECT id,Name,phone FROM Account LIMIT :blockSize OFFSET :index');
         actwrap=new list<accountwrapper>();
       // As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
         for(account a:accounts)
        {
            actwrap.add(new accountwrapper(a));
        }
    }
    // this method  uses dml operation to edit the existing opportunities values or to insert new oppt values
    public void saveopps()
    {
        list<opportunity> opps=new list<opportunity>();
        opps.addAll(opts);
        upsert opps;
    }
    //his method  uses dml operation to edit the existing contact values or to insert new contact values
    public void savecons()
    {
       cnts = new list<contact>();
        cnts.addall(snts);
        upsert cnts;
    }
 //This is wrapper class which is collection of other class instances
  //here  wrapper class contains both the standard salesforce object Account and a Boolean value acflag   
 public class Accountwrapper{
        public account acc{set;get;}
        public boolean acflag{set;get;}
             //In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
             // We also set the boolean value to false
        public accountwrapper(account a){
            acc=a;
            acflag=false;
        }
   }
}
vf page
---------

<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
<apex:form >

    <!--This block dispalying account record details-->
    <apex:pageblock rendered="True">
    <apex:pageMessages ></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column >
    <apex:facet name="header" >Select</apex:facet>
             <apex:inputCheckbox value="{!a.acflag}"/>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}"/>
        <apex:column value="{!a.acc.name}"/>
        <apex:column value="{!a.acc.phone}"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
        <apex:pageblockButtons >
            <!--displays first five records-->
            <apex:commandButton value="first"  action="{!beginning}" disabled="{!prev}"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"  action="{!previous}" disabled="{!prev}"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"  action="{!next}" disabled="{!nxt}"/>
            <!-- displays last records-->
            <apex:commandButton value="last"  action="{!end}" disabled="{!nxt}"/>                                    
        </apex:pageblockButtons>
         <!--check boxs for opportunities and contacts-->
     <center> 
         <apex:inputCheckbox value="{!oppbox}">
          <!--On check/uncheck of opp check box it records appear/disapper-->
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
         <apex:inputCheckbox value="{!conbox}">
             <!--On check/uncheck of contact check box it records appear/disapper-->
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
        <apex:commandButton value="submit" action="{!submit}"/>
     </center>
    </apex:pageblock>
    
    <!--this block displays opportunity details-->
    <apex:pageblock rendered="{!flag2}" id="block" >
      <apex:pageblocktable value="{!opts}" var="o">
        
        <apex:column >
            <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet> 
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet> 
        </apex:column>
        </apex:pageblocktable>
        <apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
    </apex:pageblock>
    
    <!--this block is used for displaying contact details -->
     <apex:pageblock rendered="{!flag3}" id="con">
     <apex:pageblocktable value="{!snts}" var="c">
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c.id}" Action="{!URLFOR($Action.contact.edit,c.id)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}"/>
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
         <apex:commandButton value="Save Contacts" action="{!savecons}"/>
    </apex:pageblock>
   </apex:form>
</apex:page>
 
Best Answer chosen by anu deep 6
anu deep 6anu deep 6
HI kanika,

this is vf page

vf page
========

<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
    <script>
    function checkallflag(allCheckboxes) {
    
        var container = allCheckboxes;
        while (container.tagName != "TABLE") {
            container = container.parentNode;
        }
    
        var inputs = container.getElementsByTagName("input");
        var checked = allCheckboxes.checked;
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs.item(i);
            if (input.type == "checkbox") {
                if (input != allCheckboxes) {
                    input.checked = checked;
                }
            }
        }
        CallSubmitMethod();
    }
    </script>
    <apex:form >
    <apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
    <!--This block dispalying account record details-->
    <apex:pageblock rendered="true">
    <apex:pageMessages ></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column >
            <apex:facet name="header">
                <apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
            </apex:facet>
            <!--<apex:facet name="header">Select</apex:facet>-->
             <apex:inputCheckbox value="{!a.acflag}">
                 <apex:actionSupport event="onchange" action="{!Hideandshowoppcon}"/>
             </apex:inputCheckbox>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}"/>
        <apex:column >
         <apex:facet name="header">   
           <apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
             <apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
           </apex:commandLink>
         </apex:facet>
         <apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
       </apex:column>
        <apex:column value="{!a.acc.phone}"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
      
        <apex:pageblockButtons location="top">
            <!--displays first five records-->
            <apex:commandButton value="first"  action="{!beginning}" disabled="{!prev}"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"  action="{!previous}" disabled="{!prev}"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"  action="{!next}" disabled="{!nxt}"/>
            <!-- displays last records-->
            <apex:commandButton value="last"  action="{!end}" disabled="{!nxt}"/>                                    
        </apex:pageblockButtons>
         <!-- check boxs for opportunities and contacts-->
        
     <center>  <apex:inputCheckbox value="{!oppbox}">
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
         <apex:inputCheckbox value="{!conbox}">
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
       <!-- <apex:commandButton value="submit" action="{!submit}"/>-->
       </center>
    </apex:pageblock>
    <!--this block displays opportunity details-->
     
    <apex:pageblock rendered="{!flag2}">
       
   <apex:pageblocktable value="{!opts}" var="o">
        <apex:column >
             <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet>
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
        <apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
    </apex:pageblock>
             
    <!--this block is used for displaying contact details -->
            
     <apex:pageblock rendered="{!flag3}">
         
     <apex:pageblocktable value="{!snts}" var="c">
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}"/>
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" />
         <apex:commandButton value="Save Contacts" action="{!savecons}"/>
    </apex:pageblock>
      
    </apex:form>
</apex:page>

 

All Answers

Kanika DuaKanika Dua

Hi Anu
1)When Checkbox is Deselected You can use a action function the will call a refresh functionality.
That will set your values to initialization.That is like values when page was loaded and no account was selected

2) If List Querying your opportunities is Empty  you have to set your Flag3= false.Where as you have set it to Flag2=false.Because Flag 3 is rendering your opportunity section

I hope this will help.One more suggestion you can use StandardSetController for this Functionality.Your task will become a bit easy.



Thanks and Regards



 

anu deep 6anu deep 6
Hi kanika

Thanks for your suggestions.If possible can you provide code according to my requirement or else please make modifications in my code according to requirement.
anu deep 6anu deep 6
Hi kanika,

Many many thanks for your advices.By following your advices almost all bugs got fixed,But following functionality need to be achieved.

Please help me out to achieving following functionality,

current functionality
----------------------------
 Error messages are displaying at top of account table,if we doesn't found any opportunities or contacts for selected accounts.

expected functionality
------------------------------
1.)In case the selected accounts doesn't have any opportunities.,error message should display in  blank opportunity table under account table with "No Opportunites Found" message.
2.)In case the selected accounts doesn't have any contacts.,error message should display in  blank contact table under account table with "No contacts Found" message.
  please help me out.

I here by providing my code,please make modifications according to requirement
-----------------------------------------------------------------------------------------------------------------------

Apex class
--------------
public class Acc_con_Opp_Details
{
    //list of collection of the wrapper class object
    public list<accountwrapper> actwrap           {set;get;}
    //list of collection of Account,contact and opportunity objects
    public list<Account>        accounts          {set;get;}
    public list<Account>        acts              {set;get;}
    public list<opportunity>    opts              {set;get;}
    public list<opportunity>    sopts             {set;get;}
    public list<contact>        cnts              {set;get;} 
    public list<contact>        snts              {set;get;}
    public boolean oppbox                         {set;get;}//used as check box for opportunity 
    public boolean conbox                         {set;get;}//used as check box for contact
    public boolean flag1                          {set;get;}//used in account page block  
    public boolean flag2                          {set;get;}//used in contact page block 
    public boolean flag3                          {set;get;}//used in opportunity page block
    //this variables are used for pagination purpose
    private integer totalRecs = 0;//stores no.of total records   
    private integer index = 0;//used for tracking offset
    private integer blockSize =5;//for setting size of page
    
   
    //in this constructor we are setting values to boolean values
    public Acc_con_Opp_Details()
    {
    flag1=true;
    flag2=false;
    flag3=false;
        totalRecs = [select count() from Account];//returns total no.of account records 
       getactwrap();//calling getactwrap method.
    }
    //this method displays first five records
    public void beginning()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        index = 0;
        getactwrap();
    }
    //this method displays prevoius records
     public void previous()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        index = index-blockSize;
        getactwrap();
    }
    //this method displays next records
   public void next()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        index = index+blockSize;
        getactwrap();
    }
    //this method displays last remaining records
 public void end()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        index = totalrecs - math.mod(totalRecs,blockSize);
        getactwrap();
    }  
    //this variable is used to enable or disable first and previous buttons
 public boolean prev{get
    {
        if(index == 0)
        return true;
        else
        return false;
    }  set;}
    //this variable is used to enable or disable next and last buttons
 public boolean nxt{get
    {
        if((index + blockSize) > totalRecs)
        return true;
        else
        return false;
    }   set;}
    //used to display opportunities and contacts w.r.t selected accounts
    public void  submit()
    {
        flag1=false;
        acts=new list<Account>();
        for(accountwrapper aw:actwrap)
           {
            if(aw.acflag){
                acts.add(aw.acc);
           }
    }
        
        //if we select contact check box,then it displays contacts for selected accounts 
      if(conbox)
      {
      
              snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
              if(snts.size()>0)
              {
                  flag3=true;
              }
              else
              {
                // //dispalys error message if we does't found any contact records for selected accounts.
                  for(accountwrapper aw : actwrap) 
                  {
                      if(aw.acflag)
                          ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
                    }
              }
         } 
        else 
        {
             flag3 = false;
        }
        //if we select opportunity check box,then it displays opportunities for selected accounts
      if(oppbox)
        {
              opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
              if(opts.size() >0)
              {
                  flag2=true;
              }
              else       
              {
                  //dispalys error message if we does't found any opportunity records for selected accounts.
                    for(accountwrapper aw : actwrap) {
                      if(aw.acflag)
                          ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
                    }
              }
        } else {
            flag2 = false;
        }
    }
   //it hides contacts and dispalys opportunitites on uncheck of contact check box
   public void Hideandshowopp()
    {
      if(oppbox)
          {     
              submit();
          } else 
          {
              flag2 = false;
          }
    }
   //  it hides opportunities and dispalys contacts on uncheck of opportunities check box 
     public void HideandshowCon()
    {
        if(conbox)
         {    
              submit();
         } 
        else 
        {
              flag3 = false;
        }
         
    }
   public void Hideandshowoppcon() {
        Hideandshowopp();
        Hideandshowcon();
    }
   //This method uses a simple SOQL query to return a List of Accounts
     public void getactwrap() {
         accounts = Database.Query('SELECT id,Name,phone FROM Account LIMIT :blockSize OFFSET :index');
         actwrap=new list<accountwrapper>();
       // As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
         for(account a:accounts)
        {
            actwrap.add(new accountwrapper(a));
        }
    }
    // this method  uses dml operation to edit the existing opportunities values or to insert new oppt values
    public void saveopps()
    {
        list<opportunity> opps=new list<opportunity>();
        opps.addAll(opts);
        upsert opps;
    }
    //his method  uses dml operation to edit the existing contact values or to insert new contact values
    public void savecons()
    {
       cnts = new list<contact>();
        cnts.addall(snts);
        upsert cnts;
    }
 //This is wrapper class which is collection of other class instances
  //here  wrapper class contains both the standard salesforce object Account and a Boolean value acflag   
 public class accountwrapper
 {
        public account acc{set;get;}
        public boolean acflag{set;get;}
             //In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
             // We also set the boolean value to false.
        public accountwrapper(account a)
        {
            acc=a;
            acflag=false;
        }
}

}

vf page
=======

<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
    <apex:form>
  
    <!--This block dispalying account record details-->
    <apex:pageblock rendered="true">
        <apex:pageMessages></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column>
    <apex:facet name="header" >Select</apex:facet>
             <apex:inputCheckbox value="{!a.acflag}">
                 <apex:actionSupport event="onchange" action="{!Hideandshowoppcon}"/>
             </apex:inputCheckbox>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}"/>
        <apex:column value="{!a.acc.name}"/>
        <apex:column value="{!a.acc.phone}"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
        <apex:pageblockButtons >
            <!--displays first five records-->
            <apex:commandButton value="first"      action="{!beginning}" disabled="{!prev}"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"   action="{!previous}" disabled="{!prev}"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"       action="{!next}" disabled="{!nxt}"/>
            <!-- displays last records-->
            <apex:commandButton value="last"       action="{!end}" disabled="{!nxt}"/>                                    
        </apex:pageblockButtons>
         <!-- check boxs for opportunities and contacts-->
        
     <center>  
     <apex:inputCheckbox value="{!oppbox}">
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
         
         <apex:inputCheckbox value="{!conbox}">
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
        <apex:commandButton value="submit" action="{!submit}"/>
       </center>
    </apex:pageblock>
    <!--this block displays opportunity details-->
    <apex:pageblock rendered="{!flag2}" id="block" >
      <apex:pageMessages></apex:pageMessages>
   <apex:pageblocktable value="{!opts}" var="o">
        <apex:pageMessages ></apex:pageMessages>
        <apex:column >
             <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet> 
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet> 
        </apex:column>
        </apex:pageblocktable>
        <apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
    </apex:pageblock>
    <!--this block is used for displaying contact details -->
     <apex:pageblock rendered="{!flag3}">
         <apex:pageMessage summary="info pageMessage" severity="info" strength="3"/>
     <apex:pageblocktable value="{!snts}" var="c">
         
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}"/>
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
        <apex:commandButton value="Save Contacts" action="{!savecons}"/>
    </apex:pageblock>
   
    </apex:form>
</apex:page>
Kanika DuaKanika Dua

Hi anu

Then you need to render PageBlock Sections instead of Pageblock.Change Your code for opportunities Like this


<apex:pageblock >
<apex:pageBlockSection  rendered="{!!flag3}" >
         <apex:pageMessage summary="info pageMessage" severity="info" strength="3"/>
</apex:PageBlockSection>
<apex:PageblockSection rendered="{!Flag3}">
     <apex:pageblocktable value="{!snts}" var="c">
         
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}"/>
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
</apex:PageBlockSection>
        <apex:commandButton value="Save Contacts" action="{!savecons}"/>
    </apex:pageblock>


This will do work for You
I hope this will help You

Thanks and Regards 
Kanika Dua

anu deep 6anu deep 6
Hi kanika,

I here by requesting you to please fix below bugs in below code

1.)while selecting and deselecting account records check box,screen is getting blinking.Screen should not get blink

2.) If we uncheck account recocrds header check box automatically opportunities and contacts check boxs are unchecking, that's fine.But if we select account records individually with out selecting header check box and if we deselect  them individually,Opportunities and contacts check boxs are not getting unchecked.
note:-even though if we select few account records individually with out selecting master check box,on deselection of that account records,automatically opportunities and contacts check boxs should get unchecked.

 please help me out by resolving above bugs in below code.
I here by leaving the code in below posts.
anu deep 6anu deep 6
hi kanika

this is apex controller.

apex controller
=================


public class Acc_con_Opp_Details
{
    //list of collection of the wrapper class object
    public list<accountwrapper> actwrap           {set;get;}
    //list of collection of Account,contact and opportunity objects
    public list<Account>        accounts          {set;get;}
    public list<Account>        acts              {set;get;}
    public list<opportunity>    opts              {set;get;}
    public list<opportunity>    sopts             {set;get;}
    public list<contact>        cnts              {set;get;}
    public list<contact>        snts              {set;get;}
    public boolean oppbox                         {set;get;}//used as check box for opportunity
    public boolean conbox                         {set;get;}//used as check box for contact
    public boolean flag1                          {set;get;}//used in account page block  
    public boolean flag2                          {set;get;}//used in contact page block
    public boolean flag3                          {set;get;}//used in opportunity page block
    public boolean checkallflag                   {set;get;}
    public Boolean oppError                       {set;get;}
    public Boolean conError                       {set;get;}
    //this variables are used for pagination purpose
    private integer totalRecs = 0;//stores no.of total records   
    private integer index = 0;//used for tracking offset
    private integer blockSize =5;//for setting size of page
    private String sortDirection = 'ASC';
    private String sortExp = 'Name';
    
    //in this constructor we are setting values to boolean values
    public Acc_con_Opp_Details()
    {
    flag1=true;
    flag2=false;
    flag3=false;
    oppError=false;
    conError=false;
    checkallflag = false;
    totalRecs = [select count() from Account];//returns total no.of account records
    getactwrap();//calling getactwrap method.
    }
    public String sortExpression
    {
      get
      {
         return sortExp;
      }
      set
      {
        //if the column is clicked on then switch between Ascending and Descending modes
        if (value == sortExp)
          sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
        else
          sortDirection = 'ASC';
          sortExp = value;
      }
    }

    public String getSortDirection()
    {
       //if not column is selected
       if (sortExpression == null || sortExpression == '')
           return 'ASC';
       else
          return sortDirection;
    }

    public void setSortDirection(String value)
    {  
        sortDirection = value;
    }
    //this method displays first five records
    public void beginning()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = 0;
        getactwrap();
    }
    //this method displays prevoius records
     public void previous()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = index-blockSize;
        getactwrap();
    }
    //this method displays next records
   public void next()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = index+blockSize;
        getactwrap();
    }
    //this method displays last remaining records
 public void end()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = totalrecs - math.mod(totalRecs,blockSize);
        getactwrap();
    }  
    //this variable is used to enable or disable first and previous buttons
 public boolean prev{get
    {
        if(index == 0)
        return true;
        else
        return false;
    }  set;}
    //this variable is used to enable or disable next and last buttons
 public boolean nxt{get
    {
        if((index + blockSize) > totalRecs)
        return true;
        else
        return false;
    }   set;}
    //used to display opportunities and contacts w.r.t selected accounts
    public void  submit()
    {
        flag1=false;
        acts=new list<Account>();
        List<Boolean> acflagList = new List<Boolean>();
        for(accountwrapper aw:actwrap)
           {
            if(aw.acflag){
                acts.add(aw.acc);
                acflagList.add(aw.acflag);
           }
        }
        if(acflagList.isEmpty()) {
           oppbox=false;
           conbox=false;
           flag2=false;
           flag3=false;
           oppError=false;
           conError=false;
        }
        
        //if we select contact check box,then it displays contacts for selected accounts
      if(conbox)
      {
      
              snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
              if(snts.size()>0)
              {
                  flag3=true;
                  conError=false;
              }
              else
              {
                  for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag3=true;
                          conError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
                    }
              }
         } else {
             flag3 = false;
         }
        //if we select opportunity check box,then it displays opportunities for selected accounts
      if(oppbox)
        {
              opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
              if(opts.size() >0)
              {
                  flag2=true;
                  oppError=false;
              }
              else       
              {    
                    for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag2=true;
                          oppError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
                    }
              }
        } else {
            flag2 = false;
        }
    }
   //it hides contacts and dispalys opportunitites on uncheck of contact check box
   
    public void Hideandshowopp()
    {
     
        if(oppbox)
          {     
              submit();
          } else {
              flag2 = false;
          }
         
    }
   //  it hides opportunities and dispalys contacts on uncheck of opportunities check box
     public void HideandshowCon()
    {
        if(conbox)
         {    
              submit();
          } else {
              flag3 = false;
          }
         
    }
   
    public void Hideandshowoppcon() {
        Hideandshowopp();
        Hideandshowcon();
    }
    
    //This method uses a simple SOQL query to return a List of Accounts
     public void getactwrap() {
         string sortFullExp = sortExpression  + ' ' + sortDirection;
         accounts = Database.Query('SELECT id,Name,phone FROM Account order by ' + sortFullExp + ' LIMIT :blockSize OFFSET :index');
         actwrap=new list<accountwrapper>();
       // As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
         for(account a:accounts)
        {
            actwrap.add(new accountwrapper(a));
        }
    }
    
    // this method  uses dml operation to edit the existing opportunities values or to insert new oppt values
    public void saveopps()
    {
        list<opportunity> opps=new list<opportunity>();
        opps.addAll(opts);
        upsert opps;
    }
    //his method  uses dml operation to edit the existing contact values or to insert new contact values
    public void savecons()
    {
       cnts = new list<contact>();
        cnts.addall(snts);
        upsert cnts;
    }
 //This is wrapper class which is collection of other class instances
  //here  wrapper class contains both the standard salesforce object Account and a Boolean value acflag   
 public class accountwrapper{
        public account acc{set;get;}
        public boolean acflag{set;get;}
             //In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
             // We also set the boolean value to false
        public accountwrapper(account a){
            acc=a;
            acflag=false;
        }
        
    }

}

 
anu deep 6anu deep 6
HI kanika,
please resolve the above mentioned bugs.
this is vf page
 
anu deep 6anu deep 6
HI kanika,

this is vf page

vf page
========

<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
    <script>
    function checkallflag(allCheckboxes) {
    
        var container = allCheckboxes;
        while (container.tagName != "TABLE") {
            container = container.parentNode;
        }
    
        var inputs = container.getElementsByTagName("input");
        var checked = allCheckboxes.checked;
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs.item(i);
            if (input.type == "checkbox") {
                if (input != allCheckboxes) {
                    input.checked = checked;
                }
            }
        }
        CallSubmitMethod();
    }
    </script>
    <apex:form >
    <apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
    <!--This block dispalying account record details-->
    <apex:pageblock rendered="true">
    <apex:pageMessages ></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column >
            <apex:facet name="header">
                <apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
            </apex:facet>
            <!--<apex:facet name="header">Select</apex:facet>-->
             <apex:inputCheckbox value="{!a.acflag}">
                 <apex:actionSupport event="onchange" action="{!Hideandshowoppcon}"/>
             </apex:inputCheckbox>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}"/>
        <apex:column >
         <apex:facet name="header">   
           <apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
             <apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
           </apex:commandLink>
         </apex:facet>
         <apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
       </apex:column>
        <apex:column value="{!a.acc.phone}"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
      
        <apex:pageblockButtons location="top">
            <!--displays first five records-->
            <apex:commandButton value="first"  action="{!beginning}" disabled="{!prev}"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"  action="{!previous}" disabled="{!prev}"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"  action="{!next}" disabled="{!nxt}"/>
            <!-- displays last records-->
            <apex:commandButton value="last"  action="{!end}" disabled="{!nxt}"/>                                    
        </apex:pageblockButtons>
         <!-- check boxs for opportunities and contacts-->
        
     <center>  <apex:inputCheckbox value="{!oppbox}">
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
         <apex:inputCheckbox value="{!conbox}">
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
       <!-- <apex:commandButton value="submit" action="{!submit}"/>-->
       </center>
    </apex:pageblock>
    <!--this block displays opportunity details-->
     
    <apex:pageblock rendered="{!flag2}">
       
   <apex:pageblocktable value="{!opts}" var="o">
        <apex:column >
             <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet>
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
        <apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
    </apex:pageblock>
             
    <!--this block is used for displaying contact details -->
            
     <apex:pageblock rendered="{!flag3}">
         
     <apex:pageblocktable value="{!snts}" var="c">
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}"/>
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" />
         <apex:commandButton value="Save Contacts" action="{!savecons}"/>
    </apex:pageblock>
      
    </apex:form>
</apex:page>

 
This was selected as the best answer
anu deep 6anu deep 6
Hi kanika

I am waiting for your reply,Please help me.
anu deep 6anu deep 6
Hi kanika,

Please ignore above mentioned issues,I solved them.

1.)first one,blinking screen issue got resolved by using <apex:outputpanel> component.

2.)second one is not an issue,it was working properly.

If any more is required i will let you know,Thanks for support.

 
anu deep 6anu deep 6
Hi kanika,

I here by requesting you to ,Kindly help me out to achieve following functionalities in below code.

I am also providing code,please make modifications in the code according to requirements.

1.)Display all alphabets with command links on the account's table and upon click on any of the letter,account table should display account's records starting with the selected letter.

2.)If no account's records is selected and user clicks on opportunities/contacts check boxs then it should show error message that 'Choose atleast one account record to display opportunities' error message.Same is the case with contacts also.

User-added image
3.)If no opportunities/contacts records are found for the selected account records, it should not display save opportunities/contacts button.
     In above screen shot,you can observe that no opportunities are are found for selected accounts and it was displaying save opportunities button under opportunities table.we need to avoid that  save opportunities button,if no opportunities are found for selected accounts.

please help me to achieve above mentioned functionalities in the below code.

Apex controller
===========

public class Acc_con_Opp_Details
{
    //list of collection of the wrapper class object
    public list<accountwrapper> actwrap           {set;get;}
    //list of collection of Account,contact and opportunity objects
    public list<Account>        accounts          {set;get;}
    public list<Account>        acts              {set;get;}
    public list<opportunity>    opts              {set;get;}
    public list<opportunity>    sopts             {set;get;}
    public list<contact>        cnts              {set;get;} 
    public list<contact>        snts              {set;get;}
    public boolean oppbox                         {set;get;}//used as check box for opportunity 
    public boolean conbox                         {set;get;}//used as check box for contact
    public boolean flag1                          {set;get;}//used in account page block  
    public boolean flag2                          {set;get;}//used in contact page block 
    public boolean flag3                          {set;get;}//used in opportunity page block
    public boolean checkallflag                   {set;get;}//used for header check box
    public Boolean oppError                       {set;get;}
    public Boolean conError                       {set;get;}
    //this variables are used for pagination purpose
    private integer totalRecs = 0;//stores no.of total records   
    private integer index = 0;//used for tracking offset
    private integer blockSize =5;//for setting size of page
    private String sortDirection = 'ASC';
    private String sortExp = 'Name';
    
    //in this constructor we are setting values to boolean values
    public Acc_con_Opp_Details()
    {
    flag1=true;
    flag2=false;
    flag3=false;
    oppError=false;
    conError=false;
    checkallflag = false;
    totalRecs = [select count() from Account];//returns total no.of account records 
    getactwrap();//calling getactwrap method.
    }
    public String sortExpression
    {
      get
      {
         return sortExp;
      }
      set
      {
        //if the column is clicked on then switch between Ascending and Descending modes
        if (value == sortExp)
          sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
        else
          sortDirection = 'ASC';
          sortExp = value;
      }
    }

    public String getSortDirection()
    {
       //if not column is selected 
       if (sortExpression == null || sortExpression == '')
           return 'ASC';
       else
          return sortDirection;
    }

    public void setSortDirection(String value)
    {  
        sortDirection = value;
    }
    //this method displays first five records
    public void beginning()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = 0;
        getactwrap();
    }
    //this method displays prevoius records
     public void previous()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = index-blockSize;
        getactwrap();
    }
    //this method displays next records
   public void next()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = index+blockSize;
        getactwrap();
    }
    //this method displays last remaining records
 public void end()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = totalrecs - math.mod(totalRecs,blockSize);
        getactwrap();
    }  
    //this variable is used to enable or disable first and previous buttons
 public boolean prev{get
    {
        if(index == 0)
        return true;
        else
        return false;
    }  set;}
    //this variable is used to enable or disable next and last buttons
 public boolean nxt{get
    {
        if((index + blockSize) > totalRecs)
        return true;
        else
        return false;
    }   set;}
    //used to display opportunities and contacts w.r.t selected accounts
    public void  submit()
    {
        flag1=false;
        acts=new list<Account>();
        List<Boolean> acflagList = new List<Boolean>();
        for(accountwrapper aw:actwrap)
           {
            if(aw.acflag){
                acts.add(aw.acc);
                acflagList.add(aw.acflag);
           } 
        }
        if(acflagList.isEmpty()) {
           oppbox=false;
           conbox=false;
           flag2=false;
           flag3=false;
           oppError=false;
           conError=false;
        }
        
        //if we select contact check box,then it displays contacts for selected accounts 
      if(conbox)
      {
      
              snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
              if(snts.size()>0)
              {
                  flag3=true;
                  conError=false;
              }
              else
              {
                  for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag3=true;
                          conError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
                    }
              }
         } else {
             flag3 = false;
         }
        //if we select opportunity check box,then it displays opportunities for selected accounts
      if(oppbox)
        {
              opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
              if(opts.size() >0)
              {
                  flag2=true;
                  oppError=false;
              }
              else       
              {    
                    for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag2=true;
                          oppError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
                    }
              }
        } else {
            flag2 = false;
        }
    }
   //it hides contacts and dispalys opportunitites on uncheck of contact check box
   
    public void Hideandshowopp()
    {
     
        if(oppbox)
          {     
              submit();
          } else {
              flag2 = false;
          }
         
    }
   //  it hides opportunities and dispalys contacts on uncheck of opportunities check box 
     public void HideandshowCon()
    {
        if(conbox)
         {    
              submit();
          } else {
              flag3 = false;
          }
         
    }
   
    public void Hideandshowoppcon() {
        Hideandshowopp();
        Hideandshowcon();
    }
    
    //This method uses a simple SOQL query to return a List of Accounts
     public void getactwrap() {
         string sortFullExp = sortExpression  + ' ' + sortDirection;
         accounts = Database.Query('SELECT id,Name,phone FROM Account order by ' + sortFullExp + ' LIMIT :blockSize OFFSET :index');
         actwrap=new list<accountwrapper>();
       // As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
         for(account a:accounts)
        {
            actwrap.add(new accountwrapper(a));
        }
    }
    
    // this method  uses dml operation to edit the existing opportunities values or to insert new oppt values
    public void saveopps()
    {
        list<opportunity> opps=new list<opportunity>();
        opps.addAll(opts);
        upsert opps;
    }
    //his method  uses dml operation to edit the existing contact values or to insert new contact values
    public void savecons()
    {
       cnts = new list<contact>();
        cnts.addall(snts);
        upsert cnts;
    }
 //This is wrapper class which is collection of other class instances
  //here  wrapper class contains both the standard salesforce object Account and a Boolean value acflag   
 public class accountwrapper{
        public account acc{set;get;}
        public boolean acflag{set;get;}
             //In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
             // We also set the boolean value to false
        public accountwrapper(account a){
            acc=a;
            acflag=false;
        }
        
    }

}

vf page
======
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
    <script>
    function checkallflag(allCheckboxes) {
    
        var container = allCheckboxes;
        while (container.tagName != "TABLE") {
            container = container.parentNode;
        }
    
        var inputs = container.getElementsByTagName("input");
        var checked = allCheckboxes.checked;
        for (var i = 0; i < inputs.length; i++) { 
            var input = inputs.item(i);
            if (input.type == "checkbox") {
                if (input != allCheckboxes) {
                    input.checked = checked;
                }
            }
        }
        CallSubmitMethod();
    }
    </script>
    <apex:form >
    <apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
    <!--This block dispalying account record details-->
        <apex:outputPanel id="par">
        
           
    <apex:pageblock rendered="true">
        <apex:commandLink value="a"/>&nbsp;<apex:commandLink value="b"/>&nbsp;<apex:commandLink value="c"/>&nbsp;<apex:commandLink value="d"/>&nbsp;<apex:commandLink value="e"/>&nbsp;<apex:commandLink value="f"/>&nbsp;<apex:commandLink value="g"/>&nbsp;<apex:commandLink value="h"/>&nbsp;<apex:commandLink value="i"/>
        &nbsp;<apex:commandLink value="j"/>&nbsp;<apex:commandLink value="k"/>&nbsp;<apex:commandLink value="l"/>&nbsp;<apex:commandLink value="m"/>&nbsp;<apex:commandLink value="n"/>&nbsp;<apex:commandLink value="o"/>&nbsp;<apex:commandLink value="p"/>&nbsp;<apex:commandLink value="q"/>&nbsp;<apex:commandLink value="r"/>
        &nbsp;<apex:commandLink value="s"/>&nbsp;<apex:commandLink value="t"/>&nbsp;<apex:commandLink value="u"/>&nbsp;<apex:commandLink value="v"/>&nbsp;<apex:commandLink value="w"/>&nbsp;<apex:commandLink value="x"/>&nbsp;<apex:commandLink value="y"/>&nbsp;<apex:commandLink value="z"/>
            
    <apex:pageMessages ></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column >
            <apex:facet name="header">
                <apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
            </apex:facet>
            <!--<apex:facet name="header">Select</apex:facet>-->
             <apex:inputCheckbox value="{!a.acflag}">
                 <apex:actionSupport event="onchange" action="{!Hideandshowoppcon}" reRender="par"/>
             </apex:inputCheckbox>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}"/>
        <apex:column >
         <apex:facet name="header">   
           
           <apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
             <apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
           </apex:commandLink>
         </apex:facet>
         <apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
       </apex:column>
        <apex:column value="{!a.acc.phone}"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
      
        <apex:pageblockButtons location="top">
            <!--displays first five records-->
            <apex:commandButton value="first"  action="{!beginning}" disabled="{!prev}"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"  action="{!previous}" disabled="{!prev}"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"  action="{!next}" disabled="{!nxt}"/>
            <!-- displays last records-->
            <apex:commandButton value="last"  action="{!end}" disabled="{!nxt}"/>                                    
        </apex:pageblockButtons>
         <!-- check boxs for opportunities and contacts-->
       
     <center>  <apex:inputCheckbox value="{!oppbox}">
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
         <apex:inputCheckbox value="{!conbox}">
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
       <!-- <apex:commandButton value="submit" action="{!submit}"/>-->
       </center>
    </apex:pageblock>
    <!--this block displays opportunity details-->
    
    <apex:pageblock rendered="{!flag2}">
       
   <apex:pageblocktable value="{!opts}" var="o">
        <apex:column >
             <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet> 
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet> 
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
        <apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
    </apex:pageblock>
             
    <!--this block is used for displaying contact details -->
            
     <apex:pageblock rendered="{!flag3}">
         
     <apex:pageblocktable value="{!snts}" var="c">
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}" />
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" /> 
         <apex:commandButton value="Save Contacts" action="{!savecons}" />
    </apex:pageblock>
       
        </apex:outputPanel>
    </apex:form>
</apex:page>
Kanika DuaKanika Dua
Hi AnuDeep

I apologize for answering so late 
For sorting According to Alphabets u can implement this code snippet
On VF page in Your pageblock Table
<!-- Selecting Alphabet to Sort Results according to alphabet selected from alpha List --> <span style="float: right; margin: 5px 5px 5px 5px;"> <apex:repeat value="{!AlphaList}" var="a"> <apex:commandLink value="{!a}" action="{!BuildQuery}" rerender="TablePanel" styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}" status="TableUpdateStatus"> <apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" /> </apex:commandLink> </apex:repeat> </span> </div>

In Controller

public list<String> AlphaList {get; set;}
    public String AlphaFilter {get; set;}
 // initialization alpha list
        AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
            SortFieldSave = SortField;
        
        // alpha filter, use page parameter or set default to all
        if (apexpages.currentpage().getparameters().get('alpha') == null) {
            AlphaFilter = 'All';
        } else {
            AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
        }

Then adjust this alpha Filter in Your query.I hope this helps
anu deep 6anu deep 6
Hi kanika

No issues,Thanks for great support.I have achieved alphabetical order successfully with your help.Please help me out to solve following bugs
in the below code.

1.)With out selecting check boxs of account's record's if user clicks on opportunities/contacts check boxs then it should show error message that 'Choose atleast one account record to display opportunities' error message.Same is the case with contacts also.

User-added image
2.)If no opportunities/contacts records are found for the selected account records, it should not display save opportunities/contacts button.
     In above screen shot,you can observe that no opportunities are are found for selected accounts and it was displaying save opportunities button under opportunities table.we need to avoid that  save opportunities button,if no opportunities are found for selected accounts.

3.)Upon clicking on next button , column widths(positions) are not consistent.

Apex controller
===========
public class Acc_con_Opp_Details
{
    //list of collection of the wrapper class object
    public list<accountwrapper> actwrap           {set;get;}
    //list of collection of Account,contact and opportunity objects
    public list<Account>        accounts          {set;get;}
    public list<Account>        acts              {set;get;}
    public list<opportunity>    opts              {set;get;}
    public list<opportunity>    sopts             {set;get;}
    public list<contact>        cnts              {set;get;}
    public list<contact>        snts              {set;get;}
    public boolean oppbox                         {set;get;}//used as check box for opportunity
    public boolean conbox                         {set;get;}//used as check box for contact
    public boolean flag1                          {set;get;}//used in account page block  
    public boolean flag2                          {set;get;}//used in contact page block
    public boolean flag3                          {set;get;}//used in opportunity page block
    public boolean checkallflag                   {set;get;}//used for header check box
    public Boolean oppError                       {set;get;}//used to display opportunity error
    public Boolean conError                       {set;get;}//used to display contacts error
    public list<String> AlphaList                 {get; set;}//collection of alphabets
    public String AlphaFilter                     {get; set;}//used to filter alphabets
    private String Query;
    //this variables are used for pagination purpose
    private integer totalRecs = 0;//stores no.of total records   
    private integer index = 0;//used for tracking offset
    private integer blockSize =5;//for setting size of page
    private String sortDirection = 'ASC';
    private String sortExp = 'Name';
    public Map<String, String> mapAlpha{get; set;}
 
    //in this constructor we are setting values to boolean variables
    public Acc_con_Opp_Details()
    {
    flag1=true;
    flag2=false;
    flag3=false;
    oppError=false;
    conError=false;
    checkallflag = false;
    totalRecs = [select count() from Account];//returns total no.of account records
    getactwrap();//calling getactwrap method.
    AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
    if (apexpages.currentpage().getparameters().get('alpha') == null) {
        AlphaFilter = 'All';
    } else {
        AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
    }
    }
    public String sortExpression
    {
      get
      {
         return sortExp;
      }
      set
      {
        //if the column is clicked on then switch between Ascending and Descending modes
        if (value == sortExp)
          sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
        else
          sortDirection = 'ASC';
          sortExp = value;
      }
    }

    public String getSortDirection()
    {
       //if not column is selected
       if (sortExpression == null || sortExpression == '')
           return 'ASC';
       else
          return sortDirection;
    }

    public void setSortDirection(String value)
    {  
        sortDirection = value;
    }
    //this method displays first five records
    public void beginning()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = 0;
        getactwrap();
    }
    //this method displays prevoius records
     public void previous()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = index-blockSize;
        getactwrap();
    }
    //this method displays next records
   public void next()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = index+blockSize;
        getactwrap();
    }
    //this method displays last remaining records
 public void end()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
        index = totalrecs - math.mod(totalRecs,blockSize);
        getactwrap();
    }  
    //this variable is used to enable or disable first and previous buttons
 public boolean prev{get
    {
        if(index == 0)
        return true;
        else
        return false;
    }  set;}
    //this variable is used to enable or disable next and last buttons
 public boolean nxt{get
    {
        if((index + blockSize) > totalRecs)
        return true;
        else
        return false;
    }   set;}
    //used to display opportunities and contacts w.r.t selected accounts
    public void  submit()
    {
        flag1=false;
        acts=new list<Account>();
        List<Boolean> acflagList = new List<Boolean>();
        for(accountwrapper aw:actwrap)
           {
            if(aw.acflag){
                acts.add(aw.acc);
                acflagList.add(aw.acflag);
           }
        }
        if(acflagList.isEmpty()) {
           oppbox=false;
           conbox=false;
           flag2=false;
           flag3=false;
           oppError=false;
           conError=false;
        }
        
        //if we select contact check box,then it displays contacts for selected accounts
      if(conbox)
      {
      
              snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
              if(snts.size()>0)
              {
                  flag3=true;
                  conError=false;
              }
              else
              {
                  for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag3=true;
                          conError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
                    }
              }
         } else {
             flag3 = false;
         }
        //if we select opportunity check box,then it displays opportunities for selected accounts
      if(oppbox)
        {
              opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
              if(opts.size() >0)
              {
                  flag2=true;
                  oppError=false;
              }
              else       
              {    
                    for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag2=true;
                          oppError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
                    }
              }
        } else {
            flag2 = false;
        }
    }
   //it hides contacts and dispalys opportunitites on uncheck of contact check box
   //This method uses a simple SOQL query to return a List of Accounts
    public void getactwrap() {
        String QueryIf = '';
        string sortFullExp = sortExpression  + ' ' + sortDirection;
        if (AlphaFilter == null || AlphaFilter.trim().length() == 0) {
            AlphaFilter = 'All';
        }
        
        Query = 'SELECT Id, Name, phone ' + ' FROM Account';
        
        if (AlphaFilter == 'Other') {
            QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' < \'A\' OR ' +
                                    'Name' + ' > \'Z\') AND (NOT ' +
                                    'Name' + ' LIKE \'Z%\') ');
        } else if (AlphaFilter != 'All') {
            QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' LIKE \'' + String.escapeSingleQuotes(AlphaFilter) + '%\')' );
        }
        
        Query += QueryIf;
        Query += ' ORDER BY ' + sortFullExp + ' LIMIT : blockSize OFFSET : index';
        accounts = Database.Query(Query);
        actwrap=new list<accountwrapper>();
       // As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
         for(account a:accounts)
        {
            actwrap.add(new accountwrapper(a));
        }
        flag2=false;
        flag3=false;
        oppbox=false;
        conbox=false;
        checkallflag=false;
    }
    public String QueryFor(String Q, String C) {
        if (Q == '') {
            return ' WHERE ' + C;
        } else {
            return Q + ' AND ' + C;
        }
    }
    public void Hideandshowopp()
    {
     
        if(oppbox)
          {     
              submit();
          } else {
              flag2 = false;
          }
         
    }
   //  it hides opportunities and dispalys contacts on uncheck of opportunities check box
     public void HideandshowCon()
    {
        if(conbox)
         {    
              submit();
          } else {
              flag3 = false;
          }
         
    }
   
    public void Hideandshowoppcon() {
        Hideandshowopp();
        Hideandshowcon();
    }
    
    
    // this method  uses dml operation to edit the existing opportunities values or to insert new oppt values
    public void saveopps()
    {
        list<opportunity> opps=new list<opportunity>();
        opps.addAll(opts);
        upsert opps;
    }
    //his method  uses dml operation to edit the existing contact values or to insert new contact values
    public void savecons()
    {
       cnts = new list<contact>();
        cnts.addall(snts);
        upsert cnts;
    }
 //This is wrapper class which is collection of other class instances
  //here  wrapper class contains both the standard salesforce object Account and a Boolean value acflag   
 public class accountwrapper{
        public account acc{set;get;}
        public boolean acflag{set;get;}
             //In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
             // We also set the boolean value to false
        public accountwrapper(account a){
            acc=a;
            acflag=false;
        }
        
    }

}
YOU CAN FIND VF PAGE IN BELOW POST
anu deep 6anu deep 6
hi kanika

VF PAGE
=======

vf page
=====
<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
    <style type="text/css">
    a.alpha-select
    {
       font-weight: bold;
       text-decoration: none;
       background-color: #C6E1FF;
       color: #000000 !important;
    }
    </style>
    <script>
    function checkallflag(allCheckboxes) {
    
        var container = allCheckboxes;
        while (container.tagName != "TABLE") {
            container = container.parentNode;
        }
    
        var inputs = container.getElementsByTagName("input");
        var checked = allCheckboxes.checked;
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs.item(i);
            if (input.type == "checkbox") {
                if (input != allCheckboxes) {
                    input.checked = checked;
                }
            }
        }
        CallSubmitMethod();
    }
    </script>
    <apex:form >
    <apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
    <!--This block dispalying account record details-->
    <apex:outputPanel id="par">
        
           
    <apex:pageblock id="par1" rendered="true">
        <apex:repeat value="{!AlphaList}" var="a">
          <apex:commandLink value="{!a}" action="{!getactwrap}" rerender="par1" styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}">
             <apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" />
             <!--<apex:actionSupport event="onchange" action="{!Reset}"/>-->
          </apex:commandLink>
          <apex:outputText >  |  </apex:outputText>
       </apex:repeat>
            
    <apex:pageMessages ></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column >
            <apex:facet name="header">
                <apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
            </apex:facet>
            <!--<apex:facet name="header">Select</apex:facet>-->
             <apex:inputCheckbox value="{!a.acflag}">
                 <apex:actionSupport event="onchange" action="{!Hideandshowoppcon}" reRender="par"/>
             </apex:inputCheckbox>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}"/>
        <apex:column >
         <apex:facet name="header">   
           
           <apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
             <apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
           </apex:commandLink>
         </apex:facet>
         <apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
       </apex:column>
        <apex:column value="{!a.acc.phone}"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
      
        <apex:pageblockButtons location="top">
            <!--displays first five records-->
            <apex:commandButton value="first"  action="{!beginning}" disabled="{!prev}"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"  action="{!previous}" disabled="{!prev}"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"  action="{!next}" disabled="{!nxt}"/>
            <!-- displays last records-->
            <apex:commandButton value="last"  action="{!end}" disabled="{!nxt}"/>                                    
        </apex:pageblockButtons>
         <!-- check boxs for opportunities and contacts-->
       
     <center>  <apex:inputCheckbox value="{!oppbox}">
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
         <apex:inputCheckbox value="{!conbox}">
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
       <!-- <apex:commandButton value="submit" action="{!submit}"/>-->
       </center>
    </apex:pageblock>
    <!--this block displays opportunity details-->
    <apex:pageblock rendered="{!flag2}">
       
   <apex:pageblocktable value="{!opts}" var="o">
        <apex:column >
             <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet>
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
        <apex:commandButton value="Save Opportunities" action="{!saveopps}"/>
    </apex:pageblock>
             
    <!--this block is used for displaying contact details -->
            
     <apex:pageblock rendered="{!flag3}">
         
     <apex:pageblocktable value="{!snts}" var="c">
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}" />
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" />
         <apex:commandButton value="Save Contacts" action="{!savecons}" />
    </apex:pageblock>
        </apex:outputPanel>
    </apex:form>
</apex:page>
Kanika DuaKanika Dua
Hi Anudeep

For Your First Problem
With out selecting check boxs of account's record's if user clicks on opportunities/contacts check boxs then it should show error message that 'Choose atleast one account record to display opportunities' error message.Same is the case with contacts also.

Solution is
When Your Opportunities/Contacts Checkbox is Checked you can execute a method using actionFunction that will check the variable that holds value of Account Checkbox ID's and Stuff.If the variable is null i.e. no values are selected  you can show a Apex page message Choose atleast one account record to display opportunities

For Your second Problem

If no opportunities/contacts records are found for the selected account records, it should not display save opportunities/contacts button.
     In above screen shot,you can observe that no opportunities are are found for selected accounts and it was displaying save opportunities button under opportunities table.we need to avoid that  save opportunities button,if no opportunities are found for selected accounts.

Solution is again same

IF variable doesnot have any value you can set command button rendering something like this

<apex:commandButton value="Save Opportunities" action="{!SaveMethod}" rendered={!IF(CheckboxVariable.size()>0,True,False)}






 
Kanika DuaKanika Dua
Hi Anudeep

http://www.davehelgerson.com/?p=549  Check this Link Out for UI problem

He is Using Standardset Controller which is optimized way for such task and there is an Option of search bar also.Along with controlling of No of Records per page Option.I hope this helps.If there are any other queries please let me know
anu deep 6anu deep 6
Hi kanika,

I have solved 2nd and 3rd bugs successfully.Only first bug need to be resoveld.Please provide appropriate code or please modify my programmme/code  to solve first bug.waiting for your reply.
anu deep 6anu deep 6
Hi kanika,

I have soveld all bugs success fully with your great help.And now I need to implement following enhancements in below code.

1.)If there are no accounts for a particular alphabet then it should show empty account table with "No Accounts Found" message and also first,prev,next,last buttons should be disabled as there are no records.

2.)Also put a text box component above the table and upon entering 3 or more letters then the corresponding accounts which contains the word should display. If user enters 1 or 2 letters then show error like please enter minimum 3 letters to search. If nothing is entered then no error should be displayed.

Apex controller
===========

public class Acc_con_Opp_Details
{
    //list of collection of the wrapper class object
    public list<accountwrapper> actwrap           {set;get;}
    //list of collection of Account,contact and opportunity objects
    public list<Account>        accounts          {set;get;}
    public list<Account>        acts              {set;get;}
    public list<opportunity>    opts              {set;get;}
    public list<opportunity>    sopts             {set;get;}
    public list<contact>        cnts              {set;get;} 
    public list<contact>        snts              {set;get;}
   public string                searchstring      {get;set;}//used in searching account records 
    public boolean oppbox                         {set;get;}//used as check box for opportunity 
    public boolean conbox                         {set;get;}//used as check box for contact
    public boolean flag1                          {set;get;}//used in account page block  
    public boolean flag2                          {set;get;}//used in contact page block 
    public boolean flag3                          {set;get;}//used in opportunity page block
    public boolean checkallflag                   {set;get;}//used for header check box
    public Boolean oppError                       {set;get;}//used to display opportunity error
    public Boolean conError                       {set;get;}//used to display contacts error
    public Boolean oppboxError                    {set;get;}//used to dispaly opportunity error
    public Boolean conboxError                    {set;get;}//used to display contacts error   
    public list<String> AlphaList                 {get; set;}//collection of alphabets
    public String AlphaFilter                     {get; set;}//used to filter alphabets
    private String Query;
    //this variables are used for pagination purpose
    private integer totalRecs = 0;//stores no.of total records   
    private integer index = 0;//used for tracking offset
    private integer blockSize =5;//for setting size of page
    private String sortDirection = 'ASC';
    private String sortExp = 'Name';
    public Map<String, String> mapAlpha{get; set;}
 
    //in this constructor we are setting values to boolean variables
    public Acc_con_Opp_Details()
    {
    flag1=true;
    flag2=false;
    flag3=false;
    oppError=false;
    conError=false;
    oppboxError=false;
    conboxError=false;    
    checkallflag = false;
    totalRecs = [select count() from Account];//returns total no.of account records 
    getactwrap();//calling getactwrap method.
    AlphaList = new list<String> {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Other', 'All'};
    if (apexpages.currentpage().getparameters().get('alpha') == null) {
        AlphaFilter = 'All';
    } else {
        AlphaFilter = apexpages.currentpage().getparameters().get('alpha');
    }
    }
    public String sortExpression
    {
      get
      {
         return sortExp;
      }
      set
      {
        //if the column is clicked on then switch between Ascending and Descending modes
        if (value == sortExp)
          sortDirection = (sortDirection == 'ASC')? 'DESC' : 'ASC';
        else
          sortDirection = 'ASC';
          sortExp = value;
      }
    }

    public String getSortDirection()
    {
       //if not column is selected 
       if (sortExpression == null || sortExpression == '')
           return 'ASC';
       else
          return sortDirection;
    }

    public void setSortDirection(String value)
    {  
        sortDirection = value;
    }
    //this method displays first five records
    public void beginning()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        conboxError=false;    
        oppboxError=false;
        checkallflag=false;
        index = 0;
        getactwrap();
    }
    //this method displays prevoius records
     public void previous()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        conboxError=false;    
        oppboxError=false;
        checkallflag=false;
        index = index-blockSize;
        getactwrap();
    }
    //this method displays next records
   public void next()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        conboxError=false;    
        oppboxError=false; 
        checkallflag=false;
        index = index+blockSize;
        getactwrap();
    }
    //this method displays last remaining records
 public void end()
    {    
        flag2 = false;
        flag3 = false;
        oppbox=false;
        conbox=false;
        conboxError=false;    
        oppboxError=false;
        checkallflag=false;
        index = totalrecs - math.mod(totalRecs,blockSize);
        getactwrap();
    }  
    //this variable is used to enable or disable first and previous buttons
 public boolean prev{get
    {
        if(index == 0)
        return true;
        else
        return false;
    }  set;}
    //this variable is used to enable or disable next and last buttons
 public boolean nxt{get
    {
        if((index + blockSize) > totalRecs)
        return true;
        else
        return false;
    }   set;}
    //used to display opportunities and contacts w.r.t selected accounts
    public void  submit()
    {
        
        acts=new list<Account>();
        List<Boolean> acflagList = new List<Boolean>();
        for(accountwrapper aw:actwrap)
           {
            if(aw.acflag){
                acts.add(aw.acc);
                acflagList.add(aw.acflag);
           } 
        }
        
         if(acflagList.isEmpty()) {
           if(oppbox)
               oppboxError=true;
           if(conbox)
               conboxError=true;
           flag2=false;
           flag3=false;
           oppError=false;
           conError=false;
        } 
        else 
        {
            oppboxError=false;
            conboxError=false;
        }
        
        //if we select contact check box,then it displays contacts for selected accounts 
      if(conbox)
      {
      
              snts=[select id,lastName,Department,account.name from contact where accountid IN:acts];
              if(snts.size()>0)
              {
                  flag3=true;
                  conError=false;
              }
              else
              {
                  for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag3=true;
                          conError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'contact records are not found for selected Accounts.'));
                    }
              }
         } else {
             flag3 = false;
         }
        //if we select opportunity check box,then it displays opportunities for selected accounts
      if(oppbox)
        {
              opts=[select id,name,stageName,leadsource,account.name from opportunity where accountId IN:acts];
              if(opts.size() >0)
              {
                  flag2=true;
                  oppError=false;
              }
              else       
              {    
                    for(accountwrapper aw : actwrap) {
                      if(aw.acflag) {
                          flag2=true;
                          oppError = true;
                      }
                          //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING,'opportunity records are not found for selected Accounts.'));
                    }
              }
        } else {
            flag2 = false;
        }
        
    }
   //it hides contacts and dispalys opportunitites on uncheck of contact check box
   //This method uses a simple SOQL query to return a List of Accounts
    public void getactwrap() {
        String QueryIf = '';
        string sortFullExp = sortExpression  + ' ' + sortDirection;
        if (AlphaFilter == null || AlphaFilter.trim().length() == 0) {
            AlphaFilter = 'All';
        }
        
        Query = 'SELECT Id, Name, phone ' + ' FROM Account'; 
        
        if (AlphaFilter == 'Other') {
            QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' < \'A\' OR ' + 
                                    'Name' + ' > \'Z\') AND (NOT ' + 
                                    'Name' + ' LIKE \'Z%\') ');
        } else if (AlphaFilter != 'All') {
            QueryIf = QueryFor(QueryIf, '(' + 'Name' + ' LIKE \'' + String.escapeSingleQuotes(AlphaFilter) + '%\')' );
        }
        
        Query += QueryIf;
        Query += ' ORDER BY ' + sortFullExp + ' LIMIT : blockSize OFFSET : index';
        accounts = Database.Query(Query);
        actwrap=new list<accountwrapper>();
       // As each Account is processed we create a new accountwrapper object and add it to the wrapper class(accountwrapper) list.
         for(account a:accounts)
        {
            actwrap.add(new accountwrapper(a));
        }
        flag2=false;
        flag3=false;
        oppbox=false;
        conbox=false;
        conboxError=false;    
        oppboxError=false;
        checkallflag=false;
    }
    public String QueryFor(String Q, String C) {
        if (Q == '') {
            return ' WHERE ' + C;
        } else {
            return Q + ' AND ' + C;
        }
    }
    public void Hideandshowopp()
    {
     
        if(oppbox)
          {     
              submit();
          } else {
              flag2 = false;
              oppboxError=false;
          }
         
    }
   //  it hides opportunities and dispalys contacts on uncheck of opportunities check box 
     public void HideandshowCon()
    {
        if(conbox)
         {    
              submit();
          } else {
              flag3 = false;
              conboxError=false;    
       
          }
         
    }
   
    public void Hideandshowoppcon() {
        Hideandshowopp();
        Hideandshowcon();
    }
    
    
    // this method  uses dml operation to edit the existing opportunities values or to insert new oppt values
    public void saveopps()
    {
        list<opportunity> opps=new list<opportunity>();
        opps.addAll(opts);
        upsert opps;
    }
    //his method  uses dml operation to edit the existing contact values or to insert new contact values
    public void savecons()
    {
       cnts = new list<contact>();
        cnts.addall(snts);
        upsert cnts;
    }
     //used for searching account records dynamically
     public void search(){  
     string searchquery='select name,id from account where name like \'%'+searchstring+'%\' Limit 20';  
     accounts= Database.query(searchquery);  
   }  
 //This is wrapper class which is collection of other class instances
  //here  wrapper class contains both the standard salesforce object Account and a Boolean value acflag   
 public class accountwrapper{
        public account acc{set;get;}
        public boolean acflag{set;get;}
             //In this contructor When we create a new accountwrapper object we pass a Account that is set to the acc property.
             // We also set the boolean value to false
        public accountwrapper(account a){
            acc=a;
            acflag=false;
        }
        
    }

}

NOTE:-PLEASE FIND VF PAGE IN BELOW POST.
anu deep 6anu deep 6
Hi kanika

VF PAGE
=======

<apex:page controller="Acc_con_Opp_Details" showHeader="false" docType="html-5.0">
    <style type="text/css">
    a.alpha-select 
    {
       font-weight: bold;
       text-decoration: none;
       background-color: #C6E1FF;
       color: #000000 !important;
    }
    </style>
    <script>
    function checkallflag(allCheckboxes)
    {
    
        var container = allCheckboxes;
        while (container.tagName != "TABLE") {
            container = container.parentNode;
        }
    
        var inputs = container.getElementsByTagName("input");
        var checked = allCheckboxes.checked;
        for (var i = 0; i < inputs.length; i++) { 
            var input = inputs.item(i);
            if (input.type == "checkbox") {
                if (input != allCheckboxes) {
                    input.checked = checked;
                }
            }
        }
        CallSubmitMethod();
    }
    </script>
    <apex:form >
    <apex:actionFunction name="CallSubmitMethod" action="{!submit}"/>
    <!--This block dispalying account record details-->
    <apex:outputPanel id="par">
      
           
    <apex:pageblock id="par1" rendered="true">
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enter:<apex:inputText value="{!searchstring}"/> 
         &nbsp;&nbsp;&nbsp;<apex:commandButton value="Search records" action="{!search}"/>  
        <br/><br/> <apex:repeat value="{!AlphaList}" var="a">
          <apex:commandLink value="{!a}" action="{!getactwrap}" rerender="par1" styleClass="alpha-link{!if(AlphaFilter=a,' alpha-select','')}">
             <apex:param name="AlphaFilter" value="{!a}" assignTo="{!AlphaFilter}" />
             <!--<apex:actionSupport event="onchange" action="{!Reset}"/>-->
          </apex:commandLink>
          <apex:outputText >  |  </apex:outputText>
       </apex:repeat>
            
    <apex:pageMessages ></apex:pageMessages>
    <apex:pageblocktable value="{!actwrap}" var="a">
        <apex:column >
            <apex:facet name="header">
                <apex:inputCheckbox onclick="checkallflag(this)" value="{!checkallflag}"/>
            </apex:facet>
            <!--<apex:facet name="header">Select</apex:facet>-->
             <apex:inputCheckbox value="{!a.acflag}">
                 <apex:actionSupport event="onchange" action="{!Hideandshowoppcon}" reRender="par"/>
             </apex:inputCheckbox>
        </apex:column>
        <!-- displays id,name and phone number for accounts-->
        <apex:column value="{!a.acc.id}" width="30%"/>
        <apex:column width="50%">
         <apex:facet name="header">   
           
           <apex:commandLink action="{!getactwrap}" value="Name{!IF(sortExpression=='name',IF(sortDirection='ASC','▼','▲'),'▼')}">
             <apex:param value="name" name="column" assignTo="{!sortExpression}"></apex:param>
           </apex:commandLink>
         </apex:facet>
         <apex:outputLabel >{!a.acc.Name}</apex:outputLabel>
       </apex:column>
        <apex:column value="{!a.acc.phone}" width="50%"/>
         </apex:pageblocktable>
        <!-- this buttons are used to paginate account records-->
      
        <apex:pageblockButtons location="top">
            <!--displays first five records-->
            <apex:commandButton value="first"  action="{!beginning}" disabled="{!prev}" style="height:22px;width:57px;"/>
            <!--displays previous records-->
            <apex:commandButton value="previous"  action="{!previous}" disabled="{!prev}" style="height:22px;width:57px;"/>
             <!--displays previous  next records-->
            <apex:commandButton value="next"  action="{!next}" disabled="{!nxt}" style="height:22px;width:57px;"/>
            <!-- displays last records-->
            <apex:commandButton value="last"  action="{!end}" disabled="{!nxt}" style="height:23px;width:57px;"/>                                    
        </apex:pageblockButtons>
         <!-- check boxs for opportunities and contacts-->
       
     <center>  <apex:inputCheckbox value="{!oppbox}">
     <apex:actionSupport event="onchange" action="{!Hideandshowopp}"/>
     </apex:inputCheckbox>Opportunities&nbsp;&nbsp;&nbsp;
 
         <apex:inputCheckbox value="{!conbox}">
         <apex:actionSupport event="onchange" action="{!HideandshowCon}"/>
         </apex:inputCheckbox>Contacts&nbsp;&nbsp;&nbsp;
 
       <!-- <apex:commandButton value="submit" action="{!submit}"/>-->
       </center>
         <apex:pageMessage rendered="{!oppboxError}" severity="error" strength="1" summary="Choose atleast one account record to display opportunities" />
          <apex:pageMessage rendered="{!conboxError}" severity="error" strength="1" summary="Choose atleast one account record to display contacts" /> 
    </apex:pageblock>
        
    <!--this block displays opportunity details-->
    <apex:pageblock rendered="{!flag2}">
       
   <apex:pageblocktable value="{!opts}" var="o">
        <apex:column >
             <apex:facet name="header">Opportunity Id</apex:facet>
            <apex:commandlink value="{!o.id}" Action="{!URLFOR($Action.opportunity.edit,o.Id)}"/>
        </apex:column>
        <apex:column value="{!o.account.name}" />
        <apex:column >
            <apex:facet name="header">Opportunity Name</apex:facet>
       <apex:inputtext value="{!o.name}" />
            </apex:column>
        <apex:column >
           <apex:facet name="header">Opportunity Stage</apex:facet> 
       <apex:inputtext value="{!o.stagename}"/>
        </apex:column>
       <apex:column >
         <apex:facet name="header">Opportunity Leadsource</apex:facet> 
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!oppError}" severity="error" strength="1" summary="No Opportunites Found" />
        <apex:commandButton value="Save Opportunities" action="{!saveopps}" rendered="{!opts.size !=0}"/>

    </apex:pageblock>
             
    <!--this block is used for displaying contact details -->
            
     <apex:pageblock rendered="{!flag3}">
         
     <apex:pageblocktable value="{!snts}" var="c">
        <apex:column >
            <apex:facet name="header">Contact Id</apex:facet>
            <apex:commandlink value="{!c}" Action="{!URLFOR($Action.contact.edit,c)}"/>
        </apex:column>
         <apex:column value="{!c.account.name}" />
        <apex:column >
             <apex:facet name="header">Contact Lastname</apex:facet>
            <apex:inputtext value="{!c.lastname}"/>
        </apex:column>
        <apex:column >
        <apex:facet name="header">Contact Department</apex:facet>
            <apex:inputtext value="{!c.Department}"/>
        </apex:column>
        </apex:pageblocktable>
        <apex:pageMessage rendered="{!conError}" severity="error" strength="1" summary="No Contacts Found" /> 
         <apex:commandButton value="Save Contacts" action="{!savecons}" rendered="{!snts.size !=0}"/>
    </apex:pageblock>
        </apex:outputPanel>
    </apex:form>
</apex:page>
Kanika DuaKanika Dua
Hi Anudeep

Did you checked the Above Link I shared??

If you want to have a Search Box

Then You can Use something like

Create a varibale in controller
public String abc{get;set;}

then have a inputText Field on Vf page
<apex:inputText value={!abc} />

and then provide a command button

<apex:commandbutton value="search" action="{!Search}"/>

this search method will rebuild your query like

List<Account> accList = [Select Id,Name from Account where  Name LIKE '%abc%']

Then your user will get Accounts according to Characters Typed in Search Box

If you don't want your user to Click on Search Button than You have to use action function

I hope this helps