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

error message on vf pages

Hi visual force experts

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>