【问题标题】:How to make <p:ajaxStatus> display steadily for and between two requests?如何使 <p:ajaxStatus> 在两个请求之间稳定显示?
【发布时间】:2013-07-28 12:33:58
【问题描述】:

在用户操作之后,我有两个相当连续的 ajax 请求,我通过&lt;p:ajaxStatus&gt; 指示其状态。但是在它们之间,客户端发生了一些事情(不需要用户操作),显示 ajax 状态指示有一点中断。

有没有办法缩小这个差距?

更新:
我尝试了 KidTempo 的提议,使用另一个 &lt;p:remoteCommand&gt; 来执行 async=true Ajax 请求,并使用以下 actionListener,它现在似乎可以工作了:

public void sleep(ActionEvent ae) throws InterruptedException{
    setAddressProcessingFinished(false);
    Thread thread = Thread.currentThread();
    while(addressProcessingFinished == false){
        thread.sleep(1000);
    }
}

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您是否查看过 async=true ajax 请求? (所以其他的ajax请求可以同时运行)

    您的 ajax 请求可能会一直休眠,直到您的第二个 ajax 请求完成。我认为 ajaxStatus 指示应该始终处于活动状态。

    sleepyAjax (until bean.finished==true)
    |
    |  yourAjax_1
    |  yourAjax_2 (set bean.finished = true)
    V
    sleepyAjax Finished!
    

    注意:还没有尝试过,它可能无法以这种方式工作,但我很想知道它是否可以......

    【讨论】:

    • 感谢您的回答。是的,我也想过将两个 Ajax 请求“包装”成第三个请求。但我不喜欢它产生的开销。
    • @Lester 您是指处理方面的开销吗?将 sleep(1000) 放入循环中直到 bean.finished==true 应该几乎不需要开销。 (记得设置超时)。
    • 这与包装不太一样——它是三个独立的 ajax 请求,但 sleepyAjax 可以说是“长寿”的
    • 我指的是请求数量方面的开销。我只是试图实现这一点,但尽管线程睡眠 Ajax 指示器消失得太快。有趣:我希望我在 sleepyAjax 的 actionListener 中使用断点获得的效果,因为其他线程还在继续。
    • 在调试中我注意到addressProcessingFinishedwhile 循环开始时已经为真。可以在SessionScoped bean 中发生。我在循环之前而不是之后移动了setAddressProcessingFinished(false)(下一次 - 真是个坏主意)。现在它似乎工作了。谢谢!
    猜你喜欢
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多