0

我有一个名为myPerson. 它包含很多属性,还有两个名字属性: firstnamelastname

我想使用自动完成myPerson从数据库中选择对象。用户应该能够输入名字或姓氏,并且它应该以输入数据作为他们的名字或姓氏来提出建议。然后当用户按下提交时,将从数据库中完全检索所选的 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} 但是我不再知道用户输入的是名字还是姓氏。我无法有效地在数据库中搜索,我将不得不按名字进行搜索,如果我不幸运,按姓氏搜索。

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

4

1 回答 1

0

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

于 2013-04-19T13:27:18.673 回答