PrimeFaces autoComplete使用moreText扩展maxResults

时间:2016-12-20 14:22:35

标签: primefaces autocomplete

我有一个maxResultmoreText属性的自动填充功能。

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

后立即扩展结果列表

1 个答案:

答案 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开始。

如果有人有更好的解决方案,请随时与我们分享,因为我当前的解决方案是一个糟糕的解决方法,它会调用已经传输的数据的新数据库选择。