如何防止在多次更新某些类似组件时触发ajax请求?
给定一个RichFaces数据表,每一行都绑定到一个“onclick”事件,触发一个ajax请求来呈现同一页面上的一个帧,是否可以防止发送类似的请求 类似地,我的意思是用户正在快速单击表的每一行。这会导致多个(可能代价高昂)请求被发送到后端,而只有最后一个请求足以正确呈现我想要的内容 我以为Richfaces队列提供了这个功能,但我无法让它工作。ajax请求是使用a4j:jsFunction生成的请求发送的 以下是我尝试的JSF代码:如何防止在多次更新某些类似组件时触发ajax请求?,ajax,jsf,jsf-2,richfaces,Ajax,Jsf,Jsf 2,Richfaces,给定一个RichFaces数据表,每一行都绑定到一个“onclick”事件,触发一个ajax请求来呈现同一页面上的一个帧,是否可以防止发送类似的请求 类似地,我的意思是用户正在快速单击表的每一行。这会导致多个(可能代价高昂)请求被发送到后端,而只有最后一个请求足以正确呈现我想要的内容 我以为Richfaces队列提供了这个功能,但我无法让它工作。ajax请求是使用a4j:jsFunction生成的请求发送的 以下是我尝试的JSF代码: <h:form> <a4j:queue
<h:form>
<a4j:queue ignoreDupResponses="true" name="selectRow" />
<rich:datatable ...>
[...]
<rich:column ... />
</rich:datatable>
<a4j:jsFunction name="jsSelectRow" actionListener="yyy" render="xxx">
<a4j:attachQueue name="selectRow"/>
</a4j:jsFunction>
<script toAddOnClickEventFiringJsSelectRowOnTR />
</h:form>
第二个解释了我想要什么,但对于旧版本,我无法重现“将控件合并到同一组”段落中的预期结果
我使用的是RichFaces 4.3.3.Final
编辑:在用例上更加精确。我希望行在一般情况下立即出现(应该没有/几乎没有延迟):只要客户机/网络/服务器能够足够快地处理它,就可以发出大量请求
现在,真正的用例是当连接非常慢时。ajax响应需要时间才能返回,我希望在收到第一个响应之前不会发送新的ajax请求。也就是说,队列不应等待延迟过期,而应丢弃已被最近的请求淘汰的排队请求
事实上,当我再次阅读我的第二个链接时,我认为这正是
所要做的,但这些属性在我的(较新的)Richfaces版本中似乎不可用…这里似乎准确地解释了您试图实现的目标:
requestDelay是发送请求之前等待的毫秒数
请求以合并类似的请求。值越大
快速键入时发送的请求将更少。类似的要求
队列在等待请求延迟时合并
如果ignoreDupResponse为true,则RichFaces不会浪费时间更新
如果客户端DOM知道对同一事物的另一个请求是
悬而未决的在本演示中,最好的方法是将requestDelay设置为
一个非常小的值并快速键入。您将看到DOM的数量
更新不能小于发送的请求
所以在你的例子中可能是这样的:
<a4j:queue requestDelay="300" ignoreDupResponses="true" name="selectRow" />
事实上,它解决了人们提出的问题。也许我应该解释一下这个用例。重新“编辑”:ignoreDupResponses实际上就是这样做的——放弃当前请求,转而使用新请求(基本上是dropNext策略)。请描述您为达到目标要求所做的最佳尝试,并解释您希望以不同方式工作的具体内容。