miałem ten sam problem, to był mój Solution (nie super proste, ale bardzo elastyczny):
Jeśli chcesz dodać Indikator Loading jakiegoś części strony trzeba dodać dwa <h:panelGroup>
elementów, jeden dla wskaźnik ładowania i jeden dla załadowanej treści.
np .:
<h:panelGroup styleClass="contentPreview content">
<h:outputText id="previewText" styleClass="updatePreview" value="#{lazyResultBean.previewContent}" />
</h:panelGroup>
<h:panelGroup styleClass="contentPreview loading">
<p:graphicImage style="width: 15px; height: 15px;" name="/images/ajax-loader.gif" />
</h:panelGroup>
Ważne jest, aby ustawić prawidłowy styleClass na loading
dla wskaźnika Załadunek i content
za ich treść. Oba panele również muszą mieć klasę, którą udostępniają, w tym przypadku klasa contentPreview
.
Aby przełączyć między ładowaniem wskaźnika a treścią, wystarczy wywołać funkcję JavaScript. showLoading('.contentPreview')
, aby pokazać wskaźnik obciążenia hideLoading('.contentPreview')
, aby ukryć wskaźnik i wyświetlić zawartość.
np.:
<p:commandButton id="previewBtn" onstart="showLoading('.contentPreview')" oncomplete="hideLoading('.contentPreview')" value="Preview" update="previewText" actionListener="#{lazyResultBean.loadPreviewContent(result.url)}">
</p:commandButton>
Kod dla funkcji JavaScript wygląda następująco:
function showLoading(clazz) {
console.log('showLoading' + clazz);
var loadingElements = $(clazz + '.loading');
loadingElements.each(function (index, el) {
el.style.display = 'block';
});
var contentElements = $(clazz + '.content');
contentElements.each(function (index, el) {
el.style.display = 'none';
});
}
function hideLoading(clazz) {
console.log('hideLoading' + clazz);
var loadingElements = $(clazz + '.loading');
loadingElements.each(function (index, el) {
el.style.display = 'none';
});
var contentElements = $(clazz + '.content');
contentElements.each(function (index, el) {
el.style.display = 'block';
});
}
dobrze, ale co, jeśli chcę wywołać inny status ajax? Nie chcę go całkowicie wyłączyć. Chcę wyzwalać inny, który zachowuje się inaczej – lukas
Jestem również zainteresowany souch rozwiązaniem ... znalazłeś coś, co działa dobrze? – simonC
Primefaces 5.1 nie ma już tego atrybutu "global". Jakieś sugestie. Dla składnika autouzupełniania. –