【问题标题】:autocomplete on several fields at the same time同时在多个字段上自动完成
【发布时间】:2013-04-19 21:27:18
【问题描述】:

我有一个名为myPerson 的数据库管理实体。 它包含很多属性,还有两个名字属性:firstnamelastname

我想使用自动完成功能从数据库中选择 myPersonobjects。 用户应该能够输入名字或姓氏,并且它应该以输入数据作为他们的名字或姓氏的人提出建议。 然后当用户按下提交时,选择的 myPerson 将从数据库中完全检索(由于性能问题,它一开始没有完全加载)

所以我有

<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} 但后来我不知道用户输入的是名字还是姓氏。我无法有效地在数据库中搜索,我将不得不按名字搜索,如果我不走运,按姓氏搜索。

您知道如何更好地实现这一点吗? 谢谢

【问题讨论】:

    标签: autocomplete primefaces


    【解决方案1】:

    构造另一个类,例如MyPersonTransfer 仅包含名字、姓氏和数据库 ID。然后使用这个类(而不是String)作为autoComplete() 方法和其他任何地方(例如value="#{myBean.autoCompleteValue}")的返回类型。 这样,您还可以保存 db id,然后您可以在选择它后使用它来加载完整的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-05
      • 2019-05-18
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多