同时在多个字段上自动完成

时间:2013-04-19 13:14:36

标签: autocomplete primefaces

我有一个名为myPerson的数据库管理实体。 它包含许多属性,但也包含两个名称属性:firstnamelastname

我想使用自动完成来从数据库中选择myPerson个对象。 用户应该能够键入名字或姓氏,并且应该将输入数据作为其名字或姓氏的人提出建议。 然后,当用户按下提交时,将从数据库中完全检索所选的myPersone(在性能问题的开头没有完全加载)

所以我有

<p:autoComplete minQueryLength="3" value="#{myBean.autoCompleteValue}" effect="fade" completeMethod=#{myBean.autoComplete}" forceSelection="true"/>

然后在myBean中: 我在初始化时加载字符串列表中的名字和姓氏(我没有加载所有myPerson对象以解决性能问题。 然后我的自动完成方法看起来像

public List<String> autoComplete(String prefix) {
        ArrayList<String> result = new ArrayList<String>();
        if ((prefix == null) || (prefix.length() == 0)) {
            // safety nets
            // do nothing
        } else {
            Iterator<String> iterator = names.iterator();
            while (iterator.hasNext()) {
                String elem = ((String) iterator.next());
                if (elem.toLowerCase().indexOf(prefix.toLowerCase()) == 0) {
                    result.add(elem);
                }
            }
        }
        return result;
    }

这很好用。当用户键入名字或姓氏的开头时,会在自动填充组件的下拉菜单中显示该名称。

我的问题在于后来发生的事情。如何从数据库加载选定的myPerson。 自动填充值将存储在#{myBean.autoCompleteValue}中 但是,如果用户键入了名字或姓氏,我就不知道了。我无法在数据库中有效搜索,我将不得不按名字进行搜索,如果我不幸,则按姓氏搜索。

你知道如何更好地实现这一目标吗? 感谢

1 个答案:

答案 0 :(得分:0)

构建另一个类,例如MyPersonTransfer只包含firstname,lastname和data-base id。然后使用此类(而不是String)作为autoComplete()方法和其他任何地方(例如value="#{myBean.autoCompleteValue}")的返回类型。 通过这种方式,您还可以保存数据库id,然后您可以使用它来加载完整的人员。