jsf - PrimeFaces p :autoComplete: Show number of all results

标签 jsf primefaces autocomplete

在我的 Web 应用程序中,我有一些输入值,用户应该从现有的大型列表(>2000 个项目)中选择一个项目。对于这么多项目,常规的 p:selectOneMenu 并不适合,因为呈现的 HTML 变得太大。因此,我决定改用 PrimeFaces UI 组件 p:autoComplete

为了确保快速响应时间,我使用附加属性 maxResults 来限制自动完成组件中的建议数量。 这工作得很好,我看到的唯一问题是,用户可能没有意识到这一事实,即结果可能比建议列表中显示的要多。
例如,用户开始输入,我的完整方法返回 50 个结果,但由于 maxResults 的值,只显示 10 个结果。我想要为用户提供一些可视化效果,显示还找到了 40 个结果。

我有什么想法可以实现这一目标吗?


引用文献:PrimeFaces p:autoComplete

最佳答案

我能想到两个选择。

moreText 属性和 component 隐式对象

使用隐式对象组件,您可以简单地读取建议的数量:

<p:autoComplete completeMethod="#{settings.autoCompl}"
                moreText="Total found: #{component.suggestions.size()}"/>

或者:

<p:autoComplete completeMethod="#{settings.autoCompl}"
                moreText="#{component.suggestions.size() - component.maxResults} more..."/>

另请参阅:

OmniFaces 的 resolveComponent

如果您想完全自定义,您可以使用 OmniFaces resolveComponent 。再次,通过已解决的组件,您可以简单地读取建议数量:

<p:autoComplete id="autoComplete" ...>
  <p:ajax event="query" update="found"/>
</p:autoComplete>
<o:resolveComponent name="ref" for="autoComplete"/>
<h:outputText id="found"
              value="Total found: #{ref.suggestions.size()}"/>

如果您想在建议列表附近显示文本,您可以合并一些 JavaScript:

<p:autoComplete id="autoComplete" ...>
  <p:ajax event="query" update="more"/>
</p:autoComplete>
<o:resolveComponent name="ref" for="autoComplete"/>
<h:panelGroup id="more">
  <h:panelGroup rendered="#{not empty ref.maxResults and
                            ref.suggestions.size() gt ref.maxResults}">
    <script>
      $(document.getElementById('#{ref.clientId}_panel')).append(
        '#{ref.suggestions.size() - ref.maxResults} more...'
      );
    </script>
  </h:panelGroup>
</h:panelGroup>

关于jsf - PrimeFaces p :autoComplete: Show number of all results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34413775/

相关文章:

javascript - Google 和 Bing 自动完成功能如何工作?

java - Eclipse Java 自动完成将精确匹配更改为子字符串匹配

Python:numpy 的智能感知自动完成不正确

java - 丰富的面孔和数据表

JSF。 SelectOneMenu 和 SelectItems

jquery - 如何引用同一元素中的另一个元素 <p :dataTable><p:column> using jQuery

jsf - 禁用 <p :calendar> 中的过去日期

java - PrimeFaces 的 DataTable 即时行选择未在浏览器中正确呈现

css - 设置 p :panel 的背景图像

java - 在 Primefaces5+JSF2 中渲染不工作