Indicador de carga jsf / primefaces durante el inicio del bean
En mi proyecto JSF / Primefaces, tengo muchos datos cargando en el método init (postconstruct) de mis beans. Es por eso que me gustaría mostrar un indicador GIF durante la carga del bean.
Probé con primefaces y el estado Ajax (versión programática del escaparate)
http://www.primefaces.org/showcase/ui/ajaxStatusScript.jsf
Así que agregué esto a la plantilla de mi proyecto.
<p:dialog modal="true" widgetVar="loadWidget" header="Status"
draggable="false" closable="false">
<p:graphicImage value="../images/ajaxload.gif" />
</p:dialog>
Me gustaría poder llamarloadWidget.show();
al comienzo del método init de mi frijol yloadWidget.hide();
al final.
¿Tienes una idea de dónde y cómo disparar el javascript para mostrar el gif de carga? Gracias
EDITAR
Podría añadir que intenté esto. Aquí está la parte de mi plantilla que incluye el contenido de la página. No está funcionando o el diálogo p: se incluye antes o después del contenido.
<div class="content">
<script>loadWidget.show();</script>
<ui:insert name="body" />
<script>loadWidget.hide();</script>
</div>
La consola diceloadWidget is not defined
EDIT2
Intentaré explicar cómo funciona mi proyecto. Podría ser útil
Aquí está mi plantilla
<html ... >
<f:view contentType="text/html">
<h:head> ... </head>
<h:body>
<ui:insert name="header" />
<ui:insert name="menu" />
<ui:insert name="body" />
<ui:insert name="footer" />
... <!-- Other things -->
</h:body>
</f:view>
</html>
Entonces cada página define labody
. Ejemplo de una página.
<html ... >
<ui:composition template="myTemplateAbove">
<ui:define name="body">
<h:outputText value="#{beanOfMyFirstPage.myText}" />
<p:commandButton action="#{beanOfMyFirstPage.goToAnotherPage}" />
...
</ui:define>
</ui:composition>
</html>
Luego, cada página está vinculada a un bean que extiende un BaseBean.
@ManagedBean(name = "beanOfMyFirstPage")
@ViewScoped
public class beanOfMyFirstPage extends BaseBean {
// attributes + getters and setters
@PostConstruct
public void init() {
super.init();
... // actions that take time cause of DB requests for example
}
public void goToAnotherPage() {
navigation.handleNavigation(FacesContext.getCurrentInstance(), null, "mySecondPage");
}
// methods
}
Y el frijol comun
public class BaseBean {
@PostConstruct
public void init() {
super.init();
// General actions for all beans
}
}