【发布时间】:2016-02-07 10:25:01
【问题描述】:
我正在尝试制作一个自动完成控件来处理多个数据源,当它们具有不同的访问时间时。我google了很多,但发现只有jquery或桌面解决方案,我无法适应jsf。基本上,我的想法是使用 completeMethod 生成第二个线程,并在完成后刷新自动完成列表并获得更多结果。
这是我的 xhtml 自动完成组件:
<p:autoComplete id="acSimple" value="#{testBean.txt1}" widgetVar="acSimple"
completeMethod="#{testBean.completeText}" cache="true"/>
和completeMethod bean相关的行:
private String oldQuery = "";
private List<String> result;
public List<String> completeText(String query) throws Exception {
if (!oldQuery.equals(query)) {
oldQuery = query;
result = bpp.runFastQuery(query);
Thread thread = new Thread(new SlowTask(query, result));
thread.start();
return result;
} else {
return result;
}
}
class SlowTask implements Runnable {
String str;
SlowTask(String query, List<String> result) {
str = query;
this.result = result;
}
List<String> result;
public void run() {
try {
List<String> r = bpp.runSlowQuery(str);
result.addAll(r);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我还尝试在较慢的线程完成时运行PF('acSimple').search(txt1),无论是从客户端还是从bean,都使用RequestContext.getCurrentInstance().update(":form1:acSimple");,但这也没有帮助我,它只是更新表单而不加载新数据.
如果有可能在这里实现我想要的?
【问题讨论】:
-
我的问题更具体,尽管答案相同,但现在谷歌搜索“async primefaces autocomplete”也会产生相关结果。
-
我认为你是对的它可能会提供额外的帮助,因为删除
cacheattr 也会影响进程。我将删除标志 :)
标签: jsf primefaces autocomplete