0

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

これをよりうまく実現する方法を知っていますか? ありがとう

4

1 に答える 1

0

たとえばMyPersonTransfer、名、姓、およびデータベース ID のみを含む別のクラスを作成します。次に、メソッドStringの戻り値の型として( の代わりに) このクラスを使用します。このようにして、データベースを保存し、選択した人物を完全にロードするために使用できます。autoComplete()value="#{myBean.autoCompleteValue}"id

于 2013-04-19T13:27:18.673 に答える