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
Nidhi Sharma 17Nidhi Sharma 17 

Refreshing a VF page still should display already entered fields till then for that record

I have a VF page for a survey. I want an intermediate commit action so that the user can save the fields he entered till then and can resume from there itself. But on page refresh i am not able to hold values for that record. Whole of the page gets refreshed and the values previously entered gets flushed for that record.

VF Page
 
<apex:page standardcontroller="Survey__c" extensions="ViewSurveyController" cache="false" sidebar="false" showheader="false">
<style>
    <apex:outputText value="{!surveyContainerCss}" />
</style>

<div id="survey_container">   
    <apex:form id="theForm"   >
    <apex:outputPanel id="seeSurvey" rendered="{!thankYouRendered == false}" >
        <apex:outputField value="{!Survey__c.Survey_Header__c}"/>
        <h1><apex:outputField value="{!Survey__c.Name}" rendered="{!Survey__c.Hide_Survey_Name__c == false}" /></h1>
        
    </apex:outputPanel>
    <apex:pageMessages />
    <apex:pageBlock rendered="{!thankYouRendered == false}" > 
        <div id="qList">
            
            <apex:repeat value="{!allQuestions}" var="qPreview" id="aQPreview">
    
            <div id="{!qPreview.id}" >
        
                    <apex:pageBlock id="pblock"> 
                        <h1 class="question">
                            <span class="questionNumber">{!qPreview.orderNumber}</span>
                            {!qPreview.question}
                            <apex:outputPanel rendered="{!qPreview.required}" styleClass="requiredText">
                                ({!$Label.LABS_SF_Required})
                            </apex:outputPanel>
                        </h1>
                     <div id="radio"> 
                      <apex:selectRadio layout="pageDirection" rendered="{!qPreview.renderSelectRadio}" value="{!qPreview.selectedOption}" >
                        <apex:selectOptions value="{!qPreview.singleOptions}"/>
                      </apex:selectRadio>
                    </div>
                    <div id="checkbox">           
                      <apex:selectCheckboxes layout="pageDirection" rendered="{!qPreview.renderSelectCheckboxes}" value="{!qPreview.selectedOptions}" >
                        <apex:selectOptions value="{!qPreview.multiOptions}"/>
                      </apex:selectCheckboxes> 
                    </div>
                    <div id="text"> 
                       <apex:inputTextArea cols="50" rows="10" rendered="{!qPreview.renderFreeText}" value="{!qPreview.choices}"/>  
                    </div>
                    <div id="row">
                      <apex:selectRadio rendered="{!qPreview.renderSelectRow}" value="{!qPreview.selectedOption}">
                        <apex:selectOptions value="{!qPreview.rowOptions}"/>
                      </apex:selectRadio>
                    </div>            
     
                    </apex:pageBlock>   
              
            </div>  <!-- qPreview.id -->
            
            </apex:repeat>
                         
        </div> <!-- qList -->
        
            
    </apex:pageBlock>
        <apex:outputPanel rendered="{!thankYouRendered == false}">
        <apex:outputPanel rendered="{!isInternal}" >
            {!$Label.LABS_SF_Answer_as}: 
            <apex:selectRadio value="{!anonymousAnswer}">
                <apex:selectOptions value="{!anonymousOrUser}" />
                <apex:actionSupport event="onchange" rerender="hiddenAnonymousAnswer"/>
            </apex:selectRadio>
            <apex:inputHidden value="{!anonymousAnswer}" id="hiddenAnonymousAnswer"/>
            <BR />
        </apex:outputPanel>
        <apex:commandButton action="{!submitResults}" value="{!$Label.LABS_SF_SubmitSurvey}" rerender="theForm,seeSurvey" />
        
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <apex:commandButton action="{!submit}" value="Commit"/> <!-- New button that i want to have on page -->
        
        
    </apex:outputPanel>
        <apex:outputPanel rendered="{!thankYouRendered == true}">
   
       <apex:outputText value="{!surveyThankYouText}"  escape="false"  />

        </apex:outputPanel>  
    </apex:form>

</div>
</apex:page>

Apex class
 
public void submitResults()
    {
        List <SurveyQuestionResponse__c> sqrList = new List<SurveyQuestionResponse__c>();
        
        for (question q : allQuestions)
        {
            SurveyQuestionResponse__c sqr = new SurveyQuestionResponse__c();
            if (q.renderSelectRadio == 'true')
            {
                
                if (q.required &&  (q.selectedOption == null || q.selectedOption == ''))
                {
                    Apexpages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Please fill out all required fields'));
                    return;
                }
                
                if (q.selectedOption == null || q.selectedOption == '')
                {
                    sqr.Response__c = '';
                }
                else
                {
                    sqr.Response__c = q.singleOptions.get(Integer.valueOf(q.selectedOption)).getLabel();
                }
                sqr.Survey_Question__c = q.Id;
                sqrList.add(sqr);
            }
            else if (q.renderFreeText == 'true')
            {
                if (q.required && q.choices == '')
                {
                    Apexpages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Please fill out all required fields'));
                    return;
                }
                System.debug('*****Select Radio ' + q.choices);
                
                sqr.Response__c = q.choices;
                sqr.Survey_Question__c = q.Id;
                sqrList.add(sqr);
            }
            else if (q.renderSelectCheckboxes == 'true')
            {
                if (q.required && (q.selectedOptions == null || q.selectedOptions.size() == 0))
                {
                    Apexpages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Please fill out all required fields'));
                    return;
                }
                
                for (String opt : q.selectedOptions)
                {
                    sqr = new SurveyQuestionResponse__c();
                    if (opt == '' || opt == null)
                    {
                        sqr.Response__c = '';
                    }               
                    else
                    {   
                        sqr.Response__c = q.multiOptions.get(Integer.valueOf(opt)).getLabel();
                    }
                    sqr.Survey_Question__c = q.Id;
                    sqrList.add(sqr);
                }
            }
            else if (q.renderSelectRow == 'true')
            {
                if (q.required && (q.selectedOption == null || q.selectedOption == ''))
                {
                    Apexpages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Please fill out all required fields'));
                    return;
                }
                
                if (q.selectedOption == null || q.selectedOption == '')
                {
                    sqr.Response__c = '';
                }
                else
                {
                    sqr.Response__c = q.rowOptions.get(Integer.valueOf(q.selectedOption)).getLabel();
                }
                sqr.Survey_Question__c = q.Id;
                sqrList.add(sqr);
            }
            
             
        }
        if(AddSurveyTaker())
        {
            for (SurveyQuestionResponse__c sqr : sqrList)
            {
                sqr.SurveyTaker__c = surveyTakerId;
            }
            insert sqrList;
            thankYouRendered=true;      
        }

        
    }
    
    
    private Boolean AddSurveyTaker()
    {
        String userId;
        
        if (surveyId == null)
        {
            return false;
        }
        if(caseId.toUpperCase() =='NONE'|| caseId.length()<5)
          caseId = null;    
        if(contactId.toUpperCase() =='NONE'|| contactId.length()<5)
          contactId = null;         
        if (anonymousAnswer != 'Anonymous')
        {
            userId = UserInfo.getUserId();
        }
        else
        {
            userId = null;
        }
        
        if(anonymousAnswer != 'Anonymous' && (contactId != null || caseId != null))
        {
            List<SurveyTaker__c> check = [Select Contact__c, Survey__c, Case__c, User__c From SurveyTaker__c Where Contact__c=:contactId and Survey__c=:surveyId and Case__c = :caseId and User__c=:UserId];
            if(check != null && check.size()>0){
                Apexpages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, System.Label.LABS_SF_You_have_already_taken_this_survey));
                
                return false;       
            }
        }
        
     
        
        SurveyTaker__c st = new SurveyTaker__c();
        st.Order__c= OrderId;
        st.Survey__c = surveyId;
        st.User__c = userId;
        insert st;  
        surveyTakerId = st.Id;
        return true;    
    }
}

Kindly help.
Sagar PareekSagar Pareek
You should rerender only a section of page instead of refreshing the page .
Try this 
 
<apex:commandButton action="{!submit}" value="Commit" rerender="pdId"/>

And in your page tag give attribute id as id="pgId"
 
<apex:page standardcontroller="Survey__c" extensions="ViewSurveyController" cache="false" sidebar="false" showheader="false" id="pgId">