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