2013-01-09 59 views
0

我正在使用兩個自動完成組件。第一個顯示所有汽車公司(例如:本田,福特...)和另一個自動完成必須顯示汽車模型取決於選定的汽車公司的第一次自動完成。 (如果我在第一次自動完成中選擇本田,第二次自動完成應該只顯示本田汽車模型(例如:城市,公民......))。如何根據primefaces中的另一個自動完成顯示一個自動完成?

+0

_What你試過到目前爲止_? –

回答

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(getter/setter方法):

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