p:ajaxStatus不';我不能接受第二个请求
在显示编辑对话框之前,加载gif用于显示进度p:ajaxStatus不';我不能接受第二个请求,ajax,jsf,jsf-2,primefaces,Ajax,Jsf,Jsf 2,Primefaces,在显示编辑对话框之前,加载gif用于显示进度 <p:dataTable id="accounts"> <p:column> <p:commandButton action="#{accountsBean.initializeAccount}" process="@this" oncomplete="accountsDialogWidget.show()" update=":accountsDia
<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>
有两个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。我也遇到了同样的问题。在ajax操作后更新组件后,p:ajaxstatus不再工作 这对我很有用: 只需将p:ajaxstatus id添加到更新列表中:
<p:ajaxStatus id="aj">...</p:ajaxStatus>
<h:form>
<p:commandButton ... update=":aj">...</p:commandButton>
</h:form>
。。。
...
现在它又开始工作了,似乎ajaxStatus需要知道“更新的”组件,以便再次注册它们(用于监视第二、第三……ajax请求)。我目前在一个请求中面临类似的问题。我发现ajax调用本身并不是通过PrimeFaces.ajax.AjaxRequest调用的。我也找到了同样的根本原因。当我们没有在中设置“async='true'”时,它会将请求重定向到RequestManager以调用ajax调用。我发现了一个问题,offer方法仅在请求数组长度为1时调用ajax调用,假设requests变量始终被实例化,因此长度为1,但在第二次调用时requests变量仍保留前一个对象。这是因为浏览器存储requests变量并不断将新条目推入其中,或者jQuery正在处理它。因此,对于以后的第二个请求,它不会调用ajax调用。设置“async='true'”后,问题得到解决。提到这些版本,我的PrimeFaces是1.1,jQuery目前升级到1.12.4,这就是问题所在。同样的代码片段在jQuery1.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()
}
}
}
}
可能的重复不是完全相同的问题,但是你的评论帮助我找到了原因。请制定一个简短的答案,将其标记为解决方案。也许这个问题会帮助别人。如果你认为这个问题不应该存在,我将删除问题。PrimeFo脸ts 1.1????为什么不完全升级而不仅仅是jquery?这就需要更多的麻烦和解决方法,JSF或PrimeFaces对此不负责任……确切地说,我同意这一事实。在我当前的时间线中,我无法升级PrimeFaces,所以只使用jQuery,也只能升级到1.12.4。最糟糕的是,JSF在1.1中也过时了,所以要升级PrimeFaces,即使是2.0,也需要JSF2.0。因此,我可能最终也会接触Java组件。这就是为什么我想暂时只使用jQuery的原因,是的,由于这个部分升级活动,我一直在尝试到处修补。
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()
}
}
}
}