0

2 つのオートコンプリート コンポーネントを使用しています。最初のオートコンプリートは、すべての自動車会社 (例: ホンダ、フォード...) を表示し、別のオートコンプリートは、最初のオートコンプリートで選択した自動車会社に応じて自動車のモデルを表示する必要があります。(最初のオートコンプリートで honda を選択した場合、2 番目のオートコンプリートはホンダの車のモデルのみを表示する必要があります (例: 都市、市民 ...))。

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>

makeのp:ajaxセッターを呼び出すには、 が必要です。

また、バッキング Bean (ゲッター/セッター) は省略されています。

@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 に答える