Мой вопрос относится к индикатору выполнения Prime Faces, но любая реализация vanilla jsf (с использованием jquery) будет полезна. Моя проблема в том, что когда я запускаю длинный запрос MySQL, я также отображаю индикатор выполнения. Проблема в том, что он запускает процесс после завершения запроса данных. Я предполагаю, потому что фаза рендеринга не применяется до тех пор, пока не закончится вся работа с сервером. Нужно ли запускать индикатор выполнения в другом потоке?
Индикатор выполнения не обязательно должен показывать, где находится запрос (если это вообще возможно). Я действительно просто хочу показать приложение "мышление". Может быть, с текстом или анимированным GIF. Спасибо за любую помощь.
EDIT
Это то, что у меня есть.
<p:ajaxStatus>
<f:facet name="start">
<h:graphicImage value="/resources/images/ajax-loader-bar.gif" />
</f:facet>
<f:facet name="complete">
<h:graphicImage value="/resources/images/ajax-loader-bar-still.gif" />
</f:facet>
<f:facet name="default">
<h:graphicImage value="/resources/images/ajax-loader-bar-still.gif" />
</f:facet>
</p:ajaxStatus>
Запрос не ajax.
<p:commandButton value="Yes" update="growl" onclick="confirmation.hide()"
action="#{viewLines.downloadFile}" ajax="false" />
Метод, стоящий за этим.
public void downloadFile() {
if (selectedPkgLine != null) {
ExcelSheet excelSheet = new ExcelSheet();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String pkgLineName = StringUtils.removeSpaces(StringUtils.stripGarbage(selectedPkgLine.getShortname()));
StringBuilder builder = new StringBuilder();
builder.append(pkgLineName);
builder.append(".xls");
externalContext.setResponseContentType("application/vnd.ms-excel");
externalContext.setResponseHeader("Content-Disposition", "attachment; filename=" + builder.toString());
try {
excelSheet.writeExcelSheet(this, externalContext.getResponseOutputStream());
} catch (WriteException ex) {
FacesUtils.addFatalMessage(ex.getMessage());
} catch (IOException ex) {
FacesUtils.addErrorMessage(ex.getMessage());
} catch (ServletException ex) {
FacesUtils.addErrorMessage(ex.getMessage());
}
facesContext.responseComplete();
} else {
submitDisabled = true;
FacesUtils.addErrorMessage("No packaging line was selected");
}
}