という名前のデータベース管理エンティティがありmyPerson
ます。多くの属性が含まれていますが、2 つの名前属性も含まれています 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}
、ユーザーが名前を入力したか姓を入力したかはわかりません。データベースを効率的に検索することはできず、名前で検索する必要があり、運が悪い場合は姓で検索する必要があります。
これをよりうまく実現する方法を知っていますか? ありがとう