我们输入PrimeFaces自动过滤器

时间:2013-12-12 12:41:45

标签: jsf jsf-2 primefaces

我正在使用PrimeFaces,我需要在下拉控件中使用自动过滤功能。

我的要求是,当我开始输入时,应该过滤下拉列表以仅显示与输入字符匹配的项目。

我目前正在使用自动完成控件,如下图所示,它不会进行过滤,只会以粗体突出显示输入的字符。这个控件的任何属性可以帮助我开箱即用,还是我必须自己实现?如果是这样,怎么做?

enter image description here

以下是代码:

<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;
    }
}

2 个答案:

答案 0 :(得分:1)

请结帐SelectOneMenuFilter。

http://blog.primefaces.org/?p=2097

答案 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;
}