我有类似的东西:
<p:inputText...>
<p:ajax event="keyup" update="somefield" listener="#{someBean.doSomething}"/>
</p:inputText>
Run Code Online (Sandbox Code Playgroud)
但我不想在每个按键上都做一个Ajax请求,我想在用户停止写入后半秒钟做请求.
我在另一个问题中看到jQuery解决了这个问题: 如何延迟.keyup()处理程序,直到用户停止输入?
我想知道是否可以在primefaces上执行此操作或如何从jQuery问题调整解决方案.
我正在使用PrimeFaces 3.0.M4.
先感谢您.
Xtr*_*ica 21
如果使用Primefaces 5.x,标签中有一个delay属性p:ajax用于此目的.所以这样做:
<p:inputText...>
<p:ajax event="keyup" delay="1000" listener="#{someBean.doSomething}"
update="somefield" process="@this" />
</p:inputText>
Run Code Online (Sandbox Code Playgroud)
如果没有,你可以使用f:ajax而不是p:ajax(是的,它也可以使用)来实现它p:inputText.从JSF 2.2开始f:ajax增加了对队列控制的支持.所以代码看起来像:
<p:inputText...>
<f:ajax event="keyup" delay="1000" listener="#{someBean.doSomething}"
render="somefield" execute="@this" />
</p:inputText>
Run Code Online (Sandbox Code Playgroud)
也可以看看:
Bhe*_*ung 18
为什么不使用PrimeFaces的RemoteCommand组件?
它为您提供了一个全局Javascript函数,您可以随时随地调用它.它允许您调用managed-bean方法,它具有update部分更新的属性.
<p:inputText id="input" />
<h:form>
<p:remoteCommand name="sendAjaxical" update="somefield" action="#{someBean.doSomething}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
注册事件处理程序,我从您发布的相同答案中借用了以下内容:
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
jQuery("#input").keyup(function() {
delay(function() { sendAjaxical(); }, 2000); //sendAjaxical is the name of remote-command
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24939 次 |
| 最近记录: |