我有同樣的問題,這是我的解決方案(不是超級簡單,但非常靈活的):
如果你想添加一個加載Indikator你需要添加兩個<h:panelGroup>
元素,一個頁面的某些部分加載指示器和一個用於加載的內容。
例如爲:
<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>
重要的是設置正確的styleClass的loading
的負載指示和content
的內容。 這兩個面板也需要有一個他們共享的類,在這種情況下是contentPreview
類。
要在加載指標和內容之間切換,您只需調用JavaScript函數即可。 showLoading('.contentPreview')
顯示加載指示器 hideLoading('.contentPreview')
隱藏指示器並顯示內容。
例如:
<p:commandButton id="previewBtn" onstart="showLoading('.contentPreview')" oncomplete="hideLoading('.contentPreview')" value="Preview" update="previewText" actionListener="#{lazyResultBean.loadPreviewContent(result.url)}">
</p:commandButton>
的JavaScript函數的代碼如下:
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';
});
}
很好,但如果我想觸發不同的AJAX狀態是什麼?我不想完全關閉它。我想觸發不同行爲不同的人 – lukas 2012-08-03 15:46:57
我也對souch一個解決方案感興趣...你有沒有找到一個可行的方法? – simonC 2013-08-28 08:25:13
Primefaces 5.1不再具有此屬性'global'。任何建議。對於自動填充組件。 – 2015-08-31 20:28:03