# Richfaces 4.0 Ajax Waitingpanel



## Sym (3. Okt 2011)

Hallo zusammen,

ich möchte, dass nach einer gewissen Zeit ein Fenster aufgeht, wenn der Ajaxrequest zu lange dauert. Gelöst habe ich das wie folgt:

[XML]<h:form id="form" prependId="false"
	enctype="#{multipart == true ? 'multipart/form-data' : 'application/x-www-form-urlencoded'}"
	acceptcharset="utf-8">

	<script type="text/javascript">
	     var infoWindowAMShown = false;
	     var infoWindowAMTimer;
	     function showModalInfoWindow()
	     {
	          infoWindowAMTimer = setTimeout("if(!infoWindowAMShown){#{rich:component('ajaxLoadingModalBox')}.show();infoWindowAMShown=true;}", 500);
             }
	     function hideModalInfoWindow()
	     {
	          if (infoWindowAMShown){#{rich:component('ajaxLoadingModalBox')}.hide();infoWindowAMShown=false;}else{if(infoWindowAMTimer)clearTimeout(infoWindowAMTimer);}
	     }
        </script>
        ...
        <a4j:status onstart="showModalInfoWindow()"
		onstop="hideModalInfoWindow()" 
                onsuccess="hideModalInfoWindow()"
		onerror="hideModalInfoWindow()" />

	<richopupPanel id="ajaxLoadingModalBox" minHeight="200"
		minWidth="450" height="100" width="250" zindex="2000">
		<f:facet name="header">
			<hutputText value="Bitte warten" />
		</f:facet>
	<hutputText value="Ihre Anfrage wird bearbeitet. Bitte warten..." />
		<div class="center">
			<h:graphicImage value="/images/spinner.gif" alt="spinner"
				width="100px" styleClass="right" />
		</div>
		<a4j:commandButton value="Abbrechen"
			onclick="#{rich:component('ajaxLoadingModalBox')}.hide()"
			styleClass="cancel" />
	</richopupPanel>
</h:form>[/XML]

Das funktioniert in der Regel auch:

Richfaces a4j:commandButton:
[XML]<a4j:commandButton action="#{userAdministration.search()}"
		value="Suchen" styleClass="accept acceptBtn button"
		render="userTableRegion" />[/XML]

JSF 2 h:commandButton:
[XML]<h:commandButton action="#{userAdministration.search()}"
	value="Suchen" styleClass="accept acceptBtn button">
	<f:ajax execute="@this" render="userTableRegion" />
</h:commandButton>[/XML]

Wenn ich das jedoch in einer Tabelle nutzen möchte, klappt das nicht. Das Fenster wird nicht geschlossen.

In einer rich:column befinden sich die Buttons:

[XML]<h:commandButton rendered="#{not user.active}"
	action="#{userAdministration.acticateUser(user)}"
	render="userTableRegion" value="Aktivieren" styleClass="accept"
	immediate="true">
	<f:ajax execute="@this" />
</h:commandButton>[/XML]
Hier geht das Waitingpanel auf, die Tabelle wird nicht neu gezeichnet und das Panel schließt sich nicht.

[XML]<h:commandButton rendered="#{user.active}"
	action="#{userAdministration.deacticateUser(user)}"
	value="Deaktivieren" styleClass="cancel" immediate="true">
	<f:ajax execute="@this" render=":form:userTableRegion" />
</h:commandButton>[/XML]
Hier geht das Waitingpanel auf, die Tabelle wird auch neu gezeichnet, aber das Panel schließt sich nicht.

Hat jemand eine Idee?


----------



## JimPanse (4. Okt 2011)

Hi,

da Richfaces die JS-Lib JQuery verwendet kannst du dir auch selber einen basteln:

jQuery Example: Ajax activity indicator  SKFox.com

Grüße


----------



## Sym (4. Okt 2011)

Danke, das prüfe ich mal. Obwohl ich gehofft habe, eine bestehende Richfaces-Lösung nutzen zu können. Leider hatte ich da bisher keinen Erfolg.


----------

