JSF ajax 事件延迟

JSF ajax event delay

我想使用 JSF 2 为列表实现一个实时过滤器,但是当使用 keyup 事件时,有很多请求被发送到服务器。代码如下所示:

<h:inputText id="filter_input" value="#{bean.filterText}">
    <f:ajax event="keyup" listener="#{bean.filter}" 
        render="@form:list" execute="@this" />
</h:inputText>
从 JSF 2.2 开始,

f:ajax 添加了对 ajax 事件延迟的支持。只需将它作为一个属性包含在内,其值以毫秒为单位:

<f:ajax event="keyup" delay="1000" listener="#{someBean.doSomething}"
    render="somefield" execute="@this" />

另请参阅:

  • Primefaces keyup event delay
  • Richfaces a4j event queuing
  • Delay a JSF AJAX listener for checkbox group
  • JSF 2.1 Ajax autocomplete + server search only after user stops typing

如果您使用的是以前版本的 JSF,PrimeFaces 在 JSF 支持之前就已支持类似功能:

<p:ajax event="keyup" delay="1000" listener="#{bean.filter}"
        update="somefield" process="@this" />

请注意,PrimeFace 不使用 render 属性,也不使用 execute。使用 updateprocess 代替(尽管 process="@this" 是多余的,因为它已经是 p:ajax 的默认值)

这是文档: https://www.primefaces.org/docs/vdl/5.0/core/primefaces-p/ajax.html

还有一个相关的 post:primefaces keyup event delay