[SalesForce] Reload VF page on save and edit

I have a VF page which I am accessing using – test.salesforce.com/apex/VFpage?id=xxx. I have a save and edit button on VF page which I have defined in my extension class.

VF Page(part in scope of this question):

     <apex:pageBlock >
                <apex:pageBlockButtons >
                    <apex:commandButton value="Save" action="{!saveIF}" />
                    <apex:commandButton value="Edit" action="{!edit}" /> 
                </apex:pageBlockButtons>

    <apex:pageBlockSection title="A Pageblocksection" columns="1" >
     <apex:outputfield value="{!object.game}"  rendered="{!NOT(Mode)}"/>
     <apex:inputfield value="{!object__c.game}"  rendered="{!Mode}"/>
    </apex:pageBlockSection>


    <apex:pageBlockSection title="A Pageblocksection" columns="1" >
<apex:pageblocktable value="{!variable}" var="aVar">

    .... Some fields are displayed from aVar , like aVar.field1__c,aVar.field2__c
    and there is some input I get from user and update the field1 and field2.

</apex:pageblocktable>
    </apex:pageBlockSection>

In my controller , I am setting the Mode value as true or false depending on edit

    class extension{

    pagereference saveIF(){

... do some logic and update the record.
Mode=false; // user can see fields with rendered="{!Mode}" 

    }

    pagereference edit(){
    Mode = true; // user can see fields with rendered="{!NOT(Mode)}"

    }


    }

My Problem here: When I click edit and save the record the fields are not getting updated. But when I refresh the page the fields are getting the updated values. How can I refresh the page when user hits save button?

What I tried – I tried rerendered in save button button the pageblock table section does not get updated with the values after user clicks save. It shows only the previous values.

Actual VF Page:

<apex:page standardController="Interview__c" extensions="InterviewattachmentPDFExtension" docType="html-5.0" >
<style>
  .cke_contents {
    height: 100px !important;
  }
</style>

    <apex:form >

        <apex:pageBlock id="techid">
            <apex:pageBlockButtons >
                <apex:commandButton value="Save" action="{!saveInterviewerFeedback}" />
                <apex:commandButton value="Edit" action="{!edit}" reRender="techid"/> 
                <apex:commandButton action="{!sendEmail}" value="Send an email"/>
            </apex:pageBlockButtons>
            <apex:pageBlockSection title="INTERVIEW EVALUATION SHEET" columns="1">               
                <table border="0" cellpadding="1" style="width:100%">
                    <apex:outputField value="{!interview.Name__c}"/>

                    <apex:outputField value="{!interview.Job_Application__c}"/>
                    <apex:outputField value="{!interview.Interviewer_Feedback__c}" rendered="{!NOT(interviewerMode)}"/>
                    <apex:inputField value="{!Interview__c.Interviewer_Feedback__c}" rendered="{!interviewerMode}" style="width:100%"/>                    
                    <apex:outputField value="{!interview.Interviewed_Date__c}" rendered="{!NOT(interviewerMode)}"/>
                    <apex:inputField value="{!Interview__c.Interviewed_Date__c}" rendered="{!interviewerMode}" />
                    <apex:outputField value="{!interview.Interview_Mode__c}" rendered="{!NOT(interviewerMode)}"/>
                    <apex:inputField value="{!Interview__c.Interview_Mode__c}" rendered="{!interviewerMode}"/> 
                    <apex:outputField value="{!interview.Interviewer_Emp_ID__c}"/>
                    <apex:outputField value="{!interview.Interviewer_Name__c}"/>
                    <apex:outputField value="{!interview.Additional_Interviewer__c}" rendered="{!NOT(interviewerMode)}"/>
                    <apex:inputField value="{!Interview__c.Additional_Interviewer__c}" rendered="{!interviewerMode}"/>  
                    <apex:outputField value="{!interview.Hiring_Manager_Copy__c}"/>
                    <apex:outputField value="{!interview.Years_Of_Experience__c}"/> 
                    <apex:outputField value="{!interview.Client_Name__c}"/> 
                    <apex:outputField value="{!interview.Business_Unit__c}"/>
                    <apex:outputField value="{!interview.Recommendations__c}" rendered="{!NOT(interviewerMode)}"/>
                    <apex:inputField value="{!Interview__c.Recommendations__c}" rendered="{!interviewerMode}" /> 
                    <apex:outputField value="{!interview.Fitment_Level__c}" rendered="{!NOT(interviewerMode)}"/>
                    <apex:inputField value="{!Interview__c.Fitment_Level__c}" rendered="{!interviewerMode}" />
                </table> 
            </apex:pageBlockSection>
            <!-- 
            <apex:pageBlockSection title="EVALUATION" columns="1">

    <apex:pageblockTable value="{!evaluationList}" var="evel">
        <apex:column headerValue="Parameters">  
            <apex:outputLabel value="{!evel.review}" />   
        </apex:column>

           <apex:column headerValue="Rating">                        
                <apex:selectList value="{!rating}" multiselect="false" size="1" rendered="{!interviewerMode}" >
                                <apex:selectOption itemValue="1" itemLabel="1"/>
                                <apex:selectOption itemValue="2" itemLabel="2"/>
                                <apex:selectOption itemValue="3" itemLabel="3"/>
                                <apex:selectOption itemValue="4" itemLabel="4"/>
                                <apex:selectOption itemValue="5" itemLabel="5"/>
                 </apex:selectList>     
           </apex:column>

            </apex:pageblockTable>

            </apex:pageBlockSection>
-->


            <apex:pageBlockSection columns="1" title="TECHNICAL ASSESSMENT">

                <apex:repeat value="{!interviewSkillReviews}" var="interview">


                        <apex:pageblockTable value="{!interview.Skill_review__r}" var="skillreview">
                        <table border="1px">
                        <apex:outputText value="{!skillreview.Skill__r.Name}"></apex:outputText>

                            <apex:column headerValue="Skill Name">                                
                                <apex:outputText value="{!skillreview.Skill__r.Name}"/>
                            </apex:column>
                        <apex:column headerValue="Recommended Level">
                            <apex:outputText value="{!skillreview.Level__r.Name}"/>
                        </apex:column>

                        <apex:column headerValue="Rating">
                            <apex:outputField value="{!skillreview.RatingCopy__c}" rendered="{!NOT(interviewerMode)}"/>
                            <apex:selectList value="{!rating}" multiselect="false" size="1" rendered="{!interviewerMode}" >
                                <apex:selectOption itemValue="1" itemLabel="1"/>
                                <apex:selectOption itemValue="2" itemLabel="2"/>
                                <apex:selectOption itemValue="3" itemLabel="3"/>
                                <apex:selectOption itemValue="4" itemLabel="4"/>
                                <apex:selectOption itemValue="5" itemLabel="5"/>
                            </apex:selectList>
                        </apex:column>

                        <apex:column headerValue="Rating Level Description">
                            <apex:outputText value="{!skillreview.Skill_Level_Description__c}"/>
                        </apex:column>
                         </table>

                    </apex:pageblockTable>

            </apex:repeat>
        </apex:pageBlockSection>




    </apex:pageBlock>    




</apex:form>

</apex:page>

Actual Extension:

public class InterviewattachmentPDFExtension{

    public Interview__c interview{get;set;}
    public boolean interviewerMode {get;private set;} // make it global, set to true when sending pdf
    public Interview__c interviewSkillReviews {get;set;} // child relationship
    public String rating{get;set;}
    public List<SkillReviewWrapper> SkillReviewList{get;set;}
    public List<skillHelper> evaluationList{get;set;}
    public ApexPages.StandardController standrdController;

    public InterviewattachmentPDFExtension(ApexPages.StandardController controller) {

        interview=(Interview__c)controller.getRecord();
        standrdController = new ApexPages.StandardController(interview);
        standrdController=controller;
        interview=[select Job_Application__c,Image__c,Name__c,Interviewer_Feedback__c,Interviewed_Date__c,Interview_Mode__c,Interviewer_Name__c,Hiring_Manager__c, 
                        Years_Of_Experience__c,Client_Name__c,Business_Unit__c,Recommendations__c,Interviewer_Emp_ID__c,Hiring_Manager_Copy__c,Additional_Interviewer__c,Fitment_Level__c from Interview__c where id=:interview.id];
        system.debug('Interview fields *************************************************' + this.interview.Job_Application__c);
        interviewSkillReviews = [select id,name, (select Name,Skill__r.Name,Level__r.Name,Skill_Level_Description__c,RatingCopy__c from Skill_review__r) from Interview__C where id=:interview.id];
        if(ApexPages.currentPage().getParameters().get('interviewerMode') == NULL){
            interviewerMode= true;
        }else{
            //interviewerMode = Boolean.valueOf(ApexPages.currentPage().getParameters().get('interviewerMode'));
            interviewerMode = false;
        }
        initSkillReviews(); 

    }

    private void initSkillReviews() {
        skillReviewList=new List<SkillReviewWrapper>();        
        for(Skill_Review__c sr: [SELECT Id,Name,Skill__c,Level__c,Skill_Level_Description__c,Rating__c,Level_of_Skill__c FROM Skill_Review__c where Interview__c =:interview.id ]){              
            skillReviewList.add(new SkillReviewWrapper(sr));
        }

        evaluationList = new List<skillHelper>();
        evaluationList.add(new skillHelper('Communication: Presentation of ideas, clarity of thought and expression'));
        evaluationList.add(new skillHelper('Attitude: Self-drive, flexibility and ownership towards the goal'));
        evaluationList.add(new skillHelper('Analytical Skills: Logic in presenting opinions & Views and Interpretation of Information'));
        evaluationList.add(new skillHelper('Job Knowledge & Skills:  Knowledge of concepts, Quality of experience in relevant areas'));
        evaluationList.add(new skillHelper('Leadership: Portrays the qualities and skills of a leader for the level of hiring'));
        evaluationList.add(new skillHelper('Overall rating: Not an average of the above ratings. Whether the above applicant matches the requirements for the position.'));
    }


    public pagereference saveInterviewerFeedback(){
        //IsEditMode = true;

        Set<String> setLevels = new Set<String>();
        for(SkillReviewWrapper obj: skillReviewList)
        {
            obj.rating=rating;
            setLevels.add(obj.rating);
        }

        map<String, Id> mapLevelName = new map<String, Id>();
        for(Level__c ratingObj:[SELECT Skill_of_Level__c,Id, Name FROM Level__c WHERE Name IN: setLevels ])
        {
            // store the id, name in a Map to be used later
            mapLevelName.put(ratingObj.Skill_of_Level__c, ratingObj.Id);
        }

        List<Skill_Review__c > updateLevelInSkillReview= new List<Skill_Review__c>();    
        for(SkillReviewWrapper obj: skillReviewList)
        {
            // put the level id in SkillreviewList's Level__c, to be updated in database
            // get the level id using the level name selected by user in picklist stored in SkillReviewList
            obj.skillReview.rating__c = mapLevelName.get(obj.skillReview.Level_of_Skill__c); 
            updateLevelInSkillReview.add(obj.skillReview);
        }    

       // Pagereference pgref= new Pagereference('/apex/InterviewattachmentPDF?id=' + interview.id + '&interviewerMode=false');
         interviewerMode = false;
        update updateLevelInSkillReview;
        //ApexPages.currentPage().getParameters().put('interviewerMode','false');
        standrdController.save();
        PageReference pageRef = new PageReference(ApexPages.currentPage().getUrl());
        //pageRef.setRedirect(true);
        return pageRef; 
        //return null;
    }


    public void sendEmail () { 
    OutboundEmails.SendEmailNotification(interview.id);
    }

    public pagereference edit(){
    interviewerMode = true;
    return null;
    }


}

Best Answer

try to rerender complete page or use pagereference to reload. Something like

return new pagereference('/'+recId);

This will solve the problem

or can do this

PageReference pageRef = new PageReference(ApexPages.currentPage().getUrl());
        pageRef.setRedirect(false);
        return pageRef;

or add a parameter something like

return new pagereference('/'+recId+'?interviewerMode=view');

and in the constructor

 public InterviewattachmentPDFExtension(ApexPages.StandardController controller) {
 // other code
if(ApexPages.currentPage().getParameters().get('interviewerMode') == 'view){
            interviewerMode= true;
        }else{
            //interviewerMode = Boolean.valueOf(ApexPages.currentPage().getParameters().get('interviewerMode'));
            interviewerMode = false;
        }
}
Related Topic