我正在使用PrimeFaces,我需要在下拉控件中使用自动过滤功能。
我的要求是,当我开始输入时,应该过滤下拉列表以仅显示与输入字符匹配的项目。
我目前正在使用自动完成控件,如下图所示,它不会进行过滤,只会以粗体突出显示输入的字符。这个控件的任何属性可以帮助我开箱即用,还是我必须自己实现?如果是这样,怎么做?
以下是代码:
<p:autoComplete id="state" label="state" completeMethod="#{patientBean.listStates}" required="true" dropdown="true" forceSelection="TRUE"/>
或者,是否有任何其他控制可以帮助我实现这一目标?
顺便说一句,我不确定AutoComplete控件的以下属性是否与此相关?来自PrimeFaces文档的片段如下:
autocomplete null String Controls browser autocomplete behavior.
更新 我在用: JSF 2.1.6 PrimeFaces 4.0
代码 test.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title><ui:insert name="title">Test</ui:insert></title>
</h:head>
<h:body>
<h:form id="createPatientForm">
<h:panelGrid columns="2">
<p:outputLabel value="State*"></p:outputLabel>
<p:autoComplete id="state" label="State" completeMethod="#{stateBean.listStates}" required="true" dropdown="true" forceSelection="TRUE"/>
</h:panelGrid>
</h:form>
</h:body>
</html>
StateBean.java
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
@ManagedBean
public class StateBean {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public List<String> listStates(String district) {
List<String> cities = new ArrayList<String>();
cities.add("California");
cities.add("New Jersey");
cities.add("Texas");
return cities;
}
}
答案 0 :(得分:1)
请结帐SelectOneMenuFilter。
答案 1 :(得分:1)
我知道已经有一个已接受的答案,但我仍想用&#34;自动完成&#34; -control来回答问题!有可能用它解决问题,我认为自动完成控制在某些情况下优于&#34; SelectOneMenuFilter&#34;。
您只需要更改&#34; listStates&#34;方法做你想要的!现在你的代码完全按照你告诉他做的做了!它创建了一个列表并将其放入自动完成控件。
要获得所需的结果,您需要相应地更改它:
public List<String> listStates(String district) {
List<String> tempList = new ArrayList<String>();
List<String> cities = new ArrayList<String>();
cities.add("California");
cities.add("New Jersey");
cities.add("Texas");
for (String value : cities) {
if (value.toLowerCase().contains(district.toLowerCase())) {
tempList.add(value);
}
}
return tempList;
}