在显示编辑对话框之前,使用加载gif来显示进度。
<p:dataTable id="accounts">
<p:column>
<p:commandButton
action="#{accountsBean.initializeAccount}" process="@this"
oncomplete="accountsDialogWidget.show()" update=":accountsDialog">
</p:commandButton>
</p:column>
</p:dataTable>
<p:dialog id="accountsDialog"
widgetVar="acccountsDialogWidget" dynamic="true" modal="true">
<h:form id="objectWizardForm">
...
</h:form>
</p:dialog>
ajaxStatus
组件是:
<p:ajaxStatus id="loading">
<f:facet name="start">
<h:graphicImage name="loading.gif" library="images" styleClass="loadingStatus" />
</f:facet>
<f:facet name="complete">
<h:outputText value="" />
</f:facet>
</p:ajaxStatus>
正在发出两个Ajax请求,但ajaxStatus仅显示第一个gif图像。
第一次请求:
form form
form:agents_input WindowsAD
form:accounts:3:j_... form:accounts:3:j_idt71
form:accounts_sele...
form:type_input WINDOWS
javax.faces.ViewState e2s1
javax.faces.partial.ajax true
javax.faces.partial.execute form:accounts:3:j_idt71
javax.faces.partial.render accountsDialog
javax.faces.source form:accounts:3:j_idt71
第二次请求:
accountsDialog accountsDialog
accountsDialog_contentLoa... true
form form
form:agents_input WindowsAD
form:accounts_sele...
form:type_input WINDOWS
javax.faces.ViewState e2s1
javax.faces.partial.ajax true
javax.faces.partial.execute accountsDialog
javax.faces.partial.render accountsDialog
javax.faces.source accountsDialog
为什么ajaxStatus不能用于第二个请求?我使用的是PrimeFaces 3.4.2和JSF Mojarra 2.1.13。
答案 0 :(得分:0)
我遇到了同样的问题。在ajax操作后更新组件后,p:ajaxstatus不再起作用了。
这对我有用:
只需将p:ajaxstatus-id添加到更新列表中:
<p:ajaxStatus id="aj">...</p:ajaxStatus>
<h:form>
<p:commandButton ... update=":aj">...</p:commandButton>
</h:form>
现在它再次起作用,似乎ajaxStatus需要知道&#34;更新&#34;再次注册它们的组件(用于监视第二,第三...... ajax请求)。
答案 1 :(得分:0)
我的
请求之一目前正面临类似的问题。我发现ajax调用本身未通过PrimeFaces.ajax.AjaxRequest调用。我也找到了造成这种情况的根本原因。当我们没有在
中设置“ async ='true'”时,它将请求重定向到RequestManager来调用ajax调用。我在这里看到一个问题,假设请求变量将始终被实例化,因此长度为1,但是request变量仍保留前一个变量,则offer方法仅在请求数组长度为1时才调用ajax调用。对象在第二次调用时。这是因为浏览器存储了requests变量并不断将新条目推入其中,或者jQuery正在处理它。因此,对于第二个以后的请求,它不会调用ajax调用。设置“ async ='true'”后,此问题已解决。要提到版本,我的PrimeFaces是1.1,而jQuery当前正在升级到1.12.4,这就是问题所在。相同的代码段在jQuery 1.4.2上运行良好。
if (b.async) {
jQuery.ajax(d);
} else {
PrimeFaces.ajax.RequestManager.offer(d);
}
PrimeFaces.ajax.RequestManager = {
requests: new Array(),
offer: function(a) {
this.requests.push(a);
if (this.requests.length == 1) {
var b = jQuery.ajax(a);
if (b === false) {
this.poll()
}
}
}
}