0

我正在使用两个自动完成组件。第一个显示所有汽车公司(例如:本田,福特......),另一个自动完成必须根据选择的第一个自动完成的汽车公司显示汽车型号。(如果我在第一次自动完成中选择本田,第二次自动完成应该只显示本田车型(例如:城市,思域......))。

4

1 回答 1

0

我能想到的最短的例子:

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

p:ajax必要调用 make 的设置器。

并且省略了支持 bean(getters/setters):

@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;
    }
}
于 2013-01-09T12:54:44.610 回答