Autocomplete 如何在primefaces中根据另一个自动完成显示一个自动完成?

Autocomplete 如何在primefaces中根据另一个自动完成显示一个自动完成?,autocomplete,primefaces,Autocomplete,Primefaces,我使用两个自动完成组件。第一个显示所有汽车公司(例如:本田、福特……),另一个autocomplete必须根据第一个autocomplete选择的汽车公司显示车型。(如果我在第一个自动完成中选择本田,第二个自动完成应该只显示本田车型(例如:city、civic…)。我能想到的最短示例: <h:form> <p:autoComplete value="#{bean.make}" completeMethod="#{bean.completeMake}"&g

我使用两个自动完成组件。第一个显示所有汽车公司(例如:本田、福特……),另一个autocomplete必须根据第一个autocomplete选择的汽车公司显示车型。(如果我在第一个自动完成中选择本田,第二个自动完成应该只显示本田车型(例如:city、civic…)。

我能想到的最短示例:

<h:form>
    <p:autoComplete value="#{bean.make}"
        completeMethod="#{bean.completeMake}">
        <p:ajax event="itemSelect" />
    </p:autoComplete>
    <p:autoComplete value="#{bean.model}"
        completeMethod="#{bean.completeModel}" />
</h:form>
到目前为止你试过什么?
@ManagedBean
@ViewScoped
public class Bean
{
    private List<String> makes = new ArrayList<String>();
    private Map<String, List<String>> makeModelMap = new HashMap<String, List<String>>();
    private String make, model;

    @PostConstruct
    private void init()
    {
        makes.add("Honda");
        List<String> hondaModels = new ArrayList<String>();
        hondaModels.add("Civic");
        hondaModels.add("City");
        makeModelMap.put("Honda", hondaModels);

        makes.add("Ford");
        List<String> fordModels = new ArrayList<String>();
        fordModels.add("T");
        fordModels.add("Focus");
        makeModelMap.put("Ford", fordModels);
    }

    public List<String> completeMake(String query)
    {
        List<String> results = new ArrayList<String>();
        for (String s : makes)
        {
            if (s.toLowerCase().startsWith(query.toLowerCase()))
            {
                results.add(s);
            }
        }
        return results;
    }

    public List<String> completeModel(String query)
    {
        List<String> results = new ArrayList<String>();
        for (String s : makeModelMap.get(make))
        {
            if (s.toLowerCase().startsWith(query.toLowerCase()))
            {
                results.add(s);
            }
        }
        return results;
    }
}