Using primefaces 8 to build a java web application, I had trouble figuring out how to display a busy indicator from a primefaces wizard component. Other views use onstart/oncomplete attributes for button actions to display a "loading dialog" that indicates the application is busy while the action completes. That approach doesn't work for wizard navigation, because the action is performed asynchronously from the button click. I found a stack overflow thread with a description of the solution.
In a nutshell, I used the "onnext" attribute of the p:wizard tag to open the busy dialog, and the flowListener method (onFlowProcess()) to close it. Here are a couple of code snippets.
First the xhtml code for the wizard:
<p:wizard id="importWizard"
flowListener="#{wizardController.onFlowProcess}"
widgetVar="#{rootViewId}"
showStepStatus="false"
showNavBar="false"
onnext="PF('loadingDialog').show();">
The code for the modal loading dialog:
<p:dialog modal="true"
id="loadingDialog"
widgetVar="loadingDialog"
showHeader="false"
styleClass="viewTransparentBackgroundDialog"
resizable="false">
<h:outputText value="Loading Results... Please Wait..." />
<p/>
<p:graphicImage library="images" name="ajax-loader.gif" />
</p:dialog>
The java server code:
public String onFlowProcess(FlowEvent event) {
String result = onFlowProcessHandler(event);
SessionUtility.executeRemoteCommand("PF('loadingDialog').hide();");
return result;
}
No comments:
Post a Comment