Ladeanzeige für jsf / primefaces während der Initialisierung der Bean
In meinem JSF / Primefaces-Projekt werden viele Daten in die init-Methode (Postkonstruktionsmethode) meiner Beans geladen. Aus diesem Grund möchte ich während des Ladens der Bohnen einen GIF-Indikator anzeigen.
Ich habe es mit Primefaces und dem Ajax-Status versucht (programmatische Version des Showcase)
http://www.primefaces.org/showcase/ui/ajaxStatusScript.jsf
Also habe ich dies zur Vorlage meines Projekts hinzugefügt
<p:dialog modal="true" widgetVar="loadWidget" header="Status"
draggable="false" closable="false">
<p:graphicImage value="../images/ajaxload.gif" />
</p:dialog>
Ich würde gerne anrufen könnenloadWidget.show();
am anfang der init methode meiner bean undloadWidget.hide();
Am Ende.
Haben Sie eine Idee, wo und wie Sie das Javascript aktivieren, um das Lade-GIF anzuzeigen? Vielen Dank
BEARBEITEN
Ich könnte hinzufügen, dass ich das ausprobiert habe. Hier ist der Teil meiner Vorlage, der den Inhalt der Seite enthält. Es funktioniert weder vor noch nach dem Inhalt des p: -Dialogs.
<div class="content">
<script>loadWidget.show();</script>
<ui:insert name="body" />
<script>loadWidget.hide();</script>
</div>
Die Konsole sagtloadWidget is not defined
EDIT2
Ich werde versuchen zu erklären, wie mein Projekt funktioniert. Könnte hilfreich sein.
Hier ist meine Vorlage
<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>
Dann definiert jede Seite diebody
. Beispiel einer Seite.
<html ... >
<ui:composition template="myTemplateAbove">
<ui:define name="body">
<h:outputText value="#{beanOfMyFirstPage.myText}" />
<p:commandButton action="#{beanOfMyFirstPage.goToAnotherPage}" />
...
</ui:define>
</ui:composition>
</html>
Dann wird jede Seite mit einer Bean verknüpft, die eine BaseBean erweitert.
@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
}
Und die gemeine Bohne
public class BaseBean {
@PostConstruct
public void init() {
super.init();
// General actions for all beans
}
}