【问题标题】:Autocomplete, load records on demand自动完成,按需加载记录
【发布时间】:2015-01-14 15:02:13
【问题描述】:

我正在使用 PrimeFaces 3.5。我有一个自动完成功能,当用户滚动到底部以加载更多 10 个结果(如果有)时,我希望在搜索时加载 20 行。这是我的自动完成功能:

<p:autoComplete rendered="#{autoCompleter.hasCompletions}" widgetVar="${id}"
        id="${id}" style="position: relative"
        value="#{autoCompleter.value}"
        completeMethod="#{autoCompleter.suggest}" 
        var="s"
        itemLabel="#{s.name}" 
        itemValue="#{s}"
        converter="#{autoCompleter.converter}" 
        forceSelection="true"
        queryDelay="500"
        scrollHeight="400"
        required="#{required}"
        requiredMessage="#{msgs['label.address.autocompleter.required']}"
        styleClass="#{required ? 'ui-input-required' : ''}"
        maxResults="#{autoCompleter.maxResult}">

        <p:ajax event="change"
                partialSubmit="true"
                update="#{update}"  
                onstart="if(${id}.panel.is(':visible')) return false;"/>

        <p:ajax event="itemSelect"
                partialSubmit="true"
                update="#{update}"/>

        <p:ajax event="blur"
                partialSubmit="true"
                update="#{update}"
                disabled="true"/>

        <ui:insert name="menu">
            <p:column>#{s.name}</p:column>
        </ui:insert>

    </p:autoComplete>

我已经添加了这个 javascript 来加载下一个结果块:

<p:remoteCommand name="loadNextSettlementsChunk"
                 action="#{autoCompleter.suggest}"
                 update="${id}"     
                 partialSubmit="true"
                 immediate="true"/>
<script type="text/javascript">
    jQuery(function($) {
        $('.ui-autocomplete-panel').bind('scroll', function() {
            if($(this).scrollTop() + $(this).height() >= $(this)[0].scrollHeight) {
                loadNextSettlementsChunk();
            }   
        });
    });
</script>

但我没有加载下一个结果,而是收到警告消息:

无法找到与 from-view-id 匹配的导航案例 '/policies/index.xhtml' 用于操作 '#{autoCompleter.suggest}' 结果'[Văleni (Viişoara), Viişoara, Viişoara (Todireşti), Viişoara (瓦斯路伊), 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉, Viişoara-Moşneni, Viişoara, Viişoara Mică, Viişoara (Păuneşti), 维伊什瓦拉 (Vidra), 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉, 维伊什瓦拉 (Ștefan cel Mare), Viişoara (Târgu Trotuş), Viişoara, Viişoara, Viilor, Valea Viilor, Dealu Viilor, Dealu Viilor (Moşoaia), Dealu Viilor (Poiana Lacului)]' 和 [] 括号中是我的结果。如何 解决这个问题以使其正常工作?

【问题讨论】:

    标签: javascript jquery jsf primefaces autocomplete


    【解决方案1】:

    action 属性必须指向调用某些业务逻辑并返回 voidString 的方法,但您的方法 suggest 的结果是数组列表。因此,我建议您使用actionListener 而不是action,以便在没有导航页面的情况下调用您的业务逻辑。

    <p:remoteCommand name="loadNextSettlementsChunk"
                     actionListener="#{autoCompleter.suggest}"
                     update="${id}"     
                     partialSubmit="true"
                     immediate="true"/>
    

    【讨论】:

    • 这两个我都试过了,还是不行。只有警告消息不显示。如果我通过 ${id} 来更新 remoteCommand 的属性,它会选择自动完成输入字段中的最后一个条目。
    猜你喜欢
    • 2017-07-29
    • 2014-11-01
    • 2020-07-07
    • 2020-01-23
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多