Чтобы добавить статью, у меня есть <h:commandlink>
, который выполняет действие, которое перенаправляет на страницу успеха или ошибки в зависимости от результатов действия. Действие занимает некоторое время, чтобы завершить его выполнение, примерно 4 секунды. Не могли бы вы рассказать мне, как отображать загрузочное изображение, когда действие начинает выполняться, и скрывать его, когда действие завершается?
показать рабочее изображение при выполнении действия h: commandlink
Ответы (1)
Вам нужно будет использовать ajax для поставленной задачи. Используя простой ванильный JSF и некоторый javascript, это будет решением:
<h:form>
<h:commandLink value="Submit" action="#{yourManagedBean.desiredAction}">
<f:ajax onevent="showProgress" />
</h:commandLink>
<!-- other components... -->
<!-- External div which wraps the loading gif -->
<div id="divProgress" style="display: none; height: 60px; overflow: hidden;">
<div style="display: table-cell; vertical-align: text-top;">
Working...
<!-- Locate your gif wherever you stored -->
<h:graphicImage url="resources/images/loading.gif" height="49" width="49" />
</div>
</div>
<script type="text/javascript">
function showProgress(data) {
var ajaxStatus = data.status;
switch (ajaxStatus) {
case "begin":
//This is called right before ajax request is been sent.
//Showing the div where the "loading" gif is located
document.getElementById("divProgress").style.display = 'table';
break;
case "success":
//This is called when ajax response is successfully processed.
//In your case, you will need to redirect to your success page
var url = window.location.protocol + "//"
+ window.location.host + "/"
+ (window.location.port ? ":"+ window.location.port: "");
window.location.href = url + "#{request.contextPath}/" + "#{yourManagedBean.resultUrl}";
break;
}
}
</script>
</h:form>
И в вашем управляемом компоненте:
@ManagedBean
@ViewScoped
public class YourManagedBean {
private String resultUrl;
//getters and setters...
public void desiredAction() {
//do the processing...
if (...) {
resultUrl = "success.xhtml";
} else {
resultUrl = "error.xhtml";
}
}
}
person
Luiggi Mendoza
schedule
05.12.2014
Спасибо за попытку ответить, я сделал то же самое с событием onClick для h: commandLink, и это сработало так, как я этого хочу.
- person neo; 08.12.2014
<p:blockUI>
,<pe:blockUI>
,<p:ajaxStatus>
- person Tiny   schedule 05.12.2014