是否可以使用richfaces:pickList和搜索框?

时间:2013-07-22 12:26:30

标签: jsf-2 richfaces picklist

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

我使用richfaces 4和JSF 2.0。

1 个答案:

答案 0 :(得分: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;
}