3

我有一个用例,我计划拥有一个 rich:pickList 以便用户可以从列表中选择多个项目。但是,在少数情况下,pickList 中的项目数量太大(数百甚至数千),用户向下滚动整个长度是不切实际的。那么,有没有办法在pickList的左侧列表上方有一个搜索框?它应该与 autoComplete 组件类似,因此pickList 中始终有 10 个项目,它们是在搜索框中输入的关键字最接近的匹配项。

我使用richfaces 4 和JSF 2.0。

4

1 回答 1

5

那这个呢?

页:

<h:inputText value="#{bean.prefix}">
    <a4j:ajax event="keyup" render="list" />
    <a4j:ajax event="focus" oncomplete="saveList()" />
</h:inputText>

<a4j:region>
    <rich:pickList id="list" value="#{bean.selectedList}">
        <f:selectItems value="#{bean.filteredList}" var="str" itemLabel="#{str}" itemValue="#{str}" />
    </rich:pickList>
</a4j:region>

<a4j:jsFunction name="saveList" execute="list" />

豆:

// fullList - contains everything    

public List<String> getFilteredList() {        
    List<String> filteredList = new ArrayList<String>();
    Set<String> filteredSet = new TreeSet<String>();

    for (String s : fullList) {
        if (s.startsWith(getPrefix())) {
            filteredSet.add(s);
        }

        if (filterSet.size() > 9) {
            break;
        }
    }

    filteredSet.addAll(selectedList);
        // we need to add the selected items so they would be rendered
        // target list needs to be a subset of the source list

    filteredList.addAll(filteredSet);

    return filteredList;
}
于 2013-07-22T14:25:01.613 回答