I have a pretty batch that is trigger from a VF page. Then I check the batch status using an ActionPoller until it is completed and finally I rerender the batch results.
Everything is working fine but the pageMessages rerender. I can't figure out why.
I could check that the msgPanel is rerendering ok using the NOW. But the ApexPage.Messages is empty.
My VF looks like this:
<apex:outputPanel id="msgPanel">
<h1>{!NOW()}</h1>
<apex:pageMessages id="msg"/>
</apex:outputPanel>
<apex:actionPoller interval="5" action="{!checkBatchStatus}" enabled="{!batchStatus}" onsubmit="console.log('checking..');" oncomplete="{!batchComplete}&&refreshJS();" />
<apex:actionFunction action="{!refreshGenerate}" name="refreshJS" reRender="msgPanel,resultsPanel" />
In the controller I have this:
public PageReference checkBatchStatus(){
AsyncApexJob job = [select........1];
if(job.Status == 'Completed'){
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.CONFIRM ,
currentBatch+' Completed. '));
//some internal checks
if(errors){
ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR ,errorDescription);
}
batchComplete = true;
batchStatus = false;
}else{
batchStatus = true;
}
return null;
}
public void refreshGenerate(){
// empty method, it is just used by javascript to trigger some rerenders.
}
Is this a rerender bug of salesforce ?
Please help
Best Answer
It seems that the pageMessages behave a bit like a transient variable. Since you rerender the pageMessages element in another request (the actionFunction, rather than the actionPoller), the values are resetted. I haven't confirmed this yet.
If you move the rerender of the pageMessages element as a part of the actionPoller it will work.