首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF/Primefaces AJAX请求真的是异步的吗?

问JSF/Primefaces AJAX请求真的是异步的吗?
EN

Stack Overflow用户
提问于 2012-12-06 23:13:11
回答 1查看 11.1K关注 0票数 10

我是JSF的新手,所以我不知道我面临的行为是否正常。

我有这样的代码:

代码语言:javascript
复制
<p:selectBooleanCheckbox id="locationChoice1" value="#{login.locationChoice1}">
    <p:ajax listener="#{login.chooseLocationType1}" update="locationChoice1 locationChoice2 positionChoice" />
    <p:ajax listener="#{login.retrieveGalaxies}" update="test"  />
</p:selectBooleanCheckbox>

我的login.retrieveGalaxies函数调用了sleep(8000)函数来模拟延迟。我希望我的组件locationChoice1、locationChoice2和positionChoice在1到2秒内更新,我的test组件在8秒内更新,但所有这些都是在8秒内更新。

这是正确的行为吗?

我尝试使用async参数,但它没有改变结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-06 23:36:06

它们实际上是异步的(JS上下文不会被阻塞;也就是说,您可以同时运行其他任意JS代码,而不会被阻塞)。你看到的行为是因为他们在排队。因此,它们看起来好像不是异步的。

此排队行为在JSF 2 specification的13.3.2章中指定

13.3.2 Ajax请求排队在将所有Ajax请求发送到服务器之前,必须将其放入客户端请求队列中,以确保按发送顺序处理Ajax请求。在队列中等待时间最长的请求是下一个要发送的请求。发送请求后,Ajax请求回调函数必须从队列中删除请求(也称为出队)。如果请求成功完成,则必须将其从队列中删除。如果出现错误,则必须通知客户端,但仍必须从队列中删除该请求,以便可以发送下一个请求。必须发送下一个请求(队列中最旧的请求)。有关jsf.ajax.request请求队列的更多细节,请参阅Ajax JavaScript文档。

这样做是为了确保JSF视图状态的完整性和线程安全性(并且本质上也是视图作用域bean)。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13746618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档