JSF同时进行ajax调用

时间:2011-10-27 19:31:02

标签: ajax jsf

JSF是否可以进行同时执行的ajax调用(在开始新调用之前不等待之前的调用完成)?

2 个答案:

答案 0 :(得分:11)

不,它们按规范显式排队,没有任何异常。见JSF 2 specification的第13.3.2节:

  

13.3.2 Ajax请求队列

     

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

这样做是为了确保服务器端的视图作用域bean的线程安全性。

答案 1 :(得分:3)

为了防止所谓的页面视图状态或某些表单出现问题,AJAX请求被序列化。

JSF-Extensions https://www.intersult.com/wiki/page/JSF%20Ext)为您提供了并行化AJAX请求的选项。只需将JavaScript变量jsf.ajaxQueue设置为默认值1以外的其他值。但如果您没有手动锁定来自同一表单内的重复请求或渲染相同区域,则会出现错误。

这是激活并行请求的方法:

<script type="text/javascript">
    if (jsf)
        jsf.ajaxQueue = 2;
</script>

例如,您可以使用&lt; e:async&gt;并行化页面服务器上的呈现。大多数应用程序不需要并行请求,因为它们在严格序列化时运行良好。