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