p:ajaxStatus不';我不能接受第二个请求

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

在显示编辑对话框之前,加载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>
有两个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()
            }
        }
    }
}