我有一个名为myPerson
的数据库管理实体。
它包含许多属性,但也包含两个名称属性:firstname
,lastname
我想使用自动完成来从数据库中选择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}
中
但是,如果用户键入了名字或姓氏,我就不知道了。我无法在数据库中有效搜索,我将不得不按名字进行搜索,如果我不幸,则按姓氏搜索。
你知道如何更好地实现这一目标吗? 感谢
答案 0 :(得分:0)
构建另一个类,例如MyPersonTransfer
只包含firstname,lastname和data-base id。然后使用此类(而不是String
)作为autoComplete()
方法和其他任何地方(例如value="#{myBean.autoCompleteValue}"
)的返回类型。
通过这种方式,您还可以保存数据库id
,然后您可以使用它来加载完整的人员。