我有一个maxResult
和moreText
属性的自动填充功能。
XHTML
<p:autoComplete maxResults="50" moreText="show more results" ...>
<p:ajax event="moreText" listener="#{bean.onMoreText} />
</p:autoComplete
豆
public void onMoreText(AjaxBehaviourEvent event) {
AutoComplete ac = (AutoComplete)event.getSource();
ac.setMaxResults(ac.getMaxResults() + 50);
}
我想要的是结果列表扩展了50行。它确实以这种方式工作,但我的问题是在点击moreText
行后结果列表隐藏了。当我再次搜索时,我会得到一个包含100,150,......结果的结果列表。
如何在点击show more results
答案 0 :(得分:0)
我通过添加此代码找到了符合我需求的解决方案
<p:autoComplete widgetVar="widgetVarName" completeMethod="#{bean.complete}">
<p:ajax event="moreText" listener="#{bean.onMoreText}" />
</p:autoComplete>
public List<ResultType> complete(String qry) {
setQryString(qry);
// code to get results;
}
public void onMoreText(javax.faces.event.AjaxBehaviorEvent event) {
org.primefaces.component.autocomplete.AutoComplete ac = (AutoComplete) event.getSource();
ac.setMaxResults(ac.getMaxResults() + 30);
executeJS("PF('widgetVarName').search('" + getQryString() + "')");
}
public void executeJS(String source) {
org.primefaces.context.RequestContext.getCurrentInstance().execute(source);
}
现在发生的事情是,在你点击了moreText行后,暗示了这个建议列表隐藏,maxResults会增加,并且新搜索会以用于completeMethod的qryString开始。
如果有人有更好的解决方案,请随时与我们分享,因为我当前的解决方案是一个糟糕的解决方法,它会调用已经传输的数据的新数据库选择。