0

When I select Checkbox it's value has to be passed to another PageBlock, this is My VF Page

<apex:page controller="Dynamicsearch3" sidebar="false" tabStyle="University__c"  >

<apex:form >

<apex:pageMessages />
<apex:outputPanel style="float:left;width:100%">
<apex:outputPanel style="float:right;width:80%">
<apex:pageBlock >
<apex:pageBlockSection >
<apex:pageBlockSectionItem >
<apex:outputLabel >Specialisation</apex:outputLabel><apex:selectList id="countries" value="{!selectedSpecialisation}" size="1" required="true" >
 <apex:selectOptions value="{!Specialisation}"/><apex:actionSupport event="onchange" reRender="out" status="status"/> 
</apex:selectList>
</apex:pageBlockSectionItem>
</apex:pageBlocksection>
</apex:pageBlock>
<apex:pageBlock >
<apex:pageBlocksection >
<apex:outputPanel id="out" >
        <apex:actionstatus id="status" startText="Searching...">
            <apex:facet name="stop">
                <apex:outputPanel >
                <apex:pageBlockTable value="{!coursesearch1}" var="c" rendered="{!coursesearch1.size > 0}">
                <apex:column headerValue="Select" ><apex:inputcheckbox value="{!c.selected}"> <apex:actionSupport event="onchange" action="{!getselected}" reRender="Selected_PBS"/></apex:inputcheckbox></apex:column>
                <apex:column headerValue="Name">{!c.acc.name}</apex:column>
                <apex:column headerValue="Course Duration">{!c.acc.Course_Duration__c  }</apex:column>
                <apex:column headerValue="Specialisation">{!c.acc.Specialisation__c}</apex:column>
                </apex:pageBlockTable>

                </apex:outputPanel>
            </apex:facet>
        </apex:actionstatus>
    </apex:outputPanel>
</apex:pageBlocksection>
<apex:pageBlockSection id="Selected_PBS">

<apex:pageBlockTable value="{!selectedcoursesearch}" var="c1"  >
                <apex:column headerValue="Name">{!c1.name}</apex:column>
                <apex:column headerValue="Course Duration">{!c1.Course_Duration__c  }</apex:column>
                <apex:column headerValue="Specialisation">{!c1.Specialisation__c}</apex:column>
                </apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:outputPanel>    
</apex:outputPanel>
</apex:form>
</apex:page>

This is My Controller, here In getselected() method when i Use if(wrapAccountObj.selected == true) it is not showing the Results.

public class Dynamicsearch3 {


list<Courses__c> selectedcoursesearch2= new list<Courses__c>();
 public string selectedSpecialisation { get; set; }
 public SelectOption[] Specialisation { get; set; }
 private String soql {get;set;}
 public list<Courses__c> Coursesearch{ get; set; }
 Public List<WrapperClassEx> WrapperList{get;set;}


 public Dynamicsearch3(){
 Specialisation = new List<SelectOption>();
        Schema.DescribeFieldResult fieldResult3 = Course_Detail__c.Specialisation__c.getDescribe();
        List<Schema.PicklistEntry> Spec = fieldResult3.getPicklistValues();
        Specialisation.add(new SelectOption('None','--None--'));
        for(Schema.PicklistEntry p3 : Spec)
        {
          Specialisation.add(new SelectOption(p3.getValue(), p3.getValue())); 
        }
 }
 public List<WrapperClassEx> getCoursesearch1() {
        soql ='SELECT Id,Name,Specialisation__c,Course_Duration__c   FROM Courses__c where Name!=null';

        if (selectedSpecialisation !='None')
          {
          soql += ' and Specialisation__c LIKE \''+selectedSpecialisation +'%\'';

          } 


        try {
           Coursesearch= Database.query(soql);

           WrapperList = New List<WrapperClassEx>();
              for(Courses__c acc: Coursesearch){

                    WrapperList.add(New WrapperClassEx(acc)); 
                  }

             }
         catch (Exception e) {
      ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Ooops!'));
      }
    return WrapperList;
    }

 public PageReference getselected() {
    selectedcoursesearch2.clear();
        for(WrapperClassEx wrapAccountObj : WrapperList)
         {if(wrapAccountObj.selected == true)  //**This condition is Not Working**
        selectedcoursesearch2.add(wrapAccountObj.acc);
        }

        return null;
    }
    public list<Courses__c> getSelectedcoursesearch() {
    if(selectedcoursesearch2.size()>0)
        return selectedcoursesearch2;
        else
        return null;    
    }
    Public Class WrapperClassEx{
   Public Courses__c acc{get;set;}
   Public Boolean selected{get;set;}

     Public WrapperClassEx(Courses__c accRec){
        this.acc = accRec;
        this.selected= false;
     }
   }

}
1

Ok looks like you have some required field in the page! Just wrap the actionSupport component inside the table in a actionRegion

Something like

<apex:actionRegion>
    <apex:inputcheckbox value="{!c.selected}">
        <apex:actionSupport event="onchange" action="{!getselected}" reRender="Selected_PBS" />
    </apex:inputcheckbox>
</apex:actionRegion>
1

Perhaps Avidev9 has the solution so try that first.

But the coding pattern you are using where the getCoursesearch1 method always re-creates the WrapperList tends to be fragile: each time it is called the selected state is lost. So if your re-rendering isn't working as you expect, that would be a cause of the selected state getting lost.

A safer coding pattern is to just "lazy load" the property:

Public List<WrapperClassEx> WrapperList {
    get {
        if (WrapperList == null) {
            WrapperList = New List<WrapperClassEx>();
            for(Courses__c acc : Coursesearch){
                WrapperList.add(New WrapperClassEx(acc)); 
            }
        }
        return WrapperList;
    }
    private set;
}

and lazy load the properties it depends on like Coursesearch. (Methods like getCoursesearch1 are no longer needed so coursesearch1 in the Visualforce changes to WrapperList.)

This guarantees that the code only executes once - preserving state thanks to the view state mechanism - and automatically gets the execution order right whatever changes you make to the Visualforce.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.