0

提案を取得した後、itemtipオプションでprimefacesオートコンプリートコンポーネントを使用していますが、姓の例として1つの値を選択していますが、プレーヤーの姓と名の両方をテキストボックスに表示したいので、この方法で試しました。

itemLabel="#{p.lastName} #{p.firstName} "この 2 つにある程度のスペースがあります。

<p:autoComplete id="watermark" value="#{backingBean.object}"
                            size="40" completeMethod="#{backingBean.completeholder}"
                            var="p" 
                            itemLabel="#{p.lastName} #{p.firstName} " itemValue="#{p}" converter="player">
                            <f:facet name="itemtip">
                                <h:panelGrid columns="2" styleClass="cellsp-panel">
                                    <f:facet name="header">
                                        <p:graphicImage value="#{p.imagePath}" width="60"
                                            height="60" />
                                    </f:facet>

                                    <h:outputText value="LastName " style="font-weight:bold" />
                                    <h:outputText id="ln" value="#{p.lastName}" />

                                    <h:outputText value="FirstName " style="font-weight:bold" />
                                    <h:outputText id="fn" value="#{p.firstName}" />


                                </h:panelGrid>
                            </f:facet>
                            <p:ajax event="itemSelect" update="e,c">
                            </p:ajax>

                        </p:autoComplete> 

そのため、提案を選択すると、プレーヤーの姓と名が完全に表示されます。しかし、1 つの問題が作成されます。オートコンプリート テキスト ボックスにスペースが作成されるため、バックスペースを使用してこのスペースを削除し、提案を取得するために検索できるようにする必要があります。どうすればこの問題を克服できますか?

  1. また、オートコンプリートで透かしを使用しています。 itemLabel="#{p.lastName} のような単一の itemLabel を使用する場合にのみ機能します。それ以外の場合は、オートコンプリートで透かしを表示できません。

3.また、ユーザーが大文字と小文字を区別せずに検索できるように、大文字と小文字を区別しない入力に使用すると、提案が表示されても、さらにフィルタリングするためにいくつかのキーワークを入力しようとすると、提案が消えます。デフォルトの方法。

  1. ユーザーはプレーヤーの姓または名を入力できますが、それでも提案を得る必要があります。次の方法でどのような変更を行う必要がありますか? 最初の文字を大文字にして姓を保存したので、このように toUpperCase() を使用しています

    public List completePlayer(String query) {
    リスト候補 = new ArrayList();

        for(Player p : players) {  
            if(p.getlastName().startsWith(query.toUpperCase()))  
                suggestions.add(p);  
        }  
    
        return suggestions;  
    } 
    

どうすればこの問題を克服できますか?

4

1 に答える 1

1

プレーヤーの比較は次のように解決されます:
Smith.startsWith("S") -> true
Smith.startsWith("SM") -> false

あなたが望むものは:

if(p.getlastName().toUpperCase().startsWith(query.toUpperCase()))

オートコンプリートのスペースは、次の行から来ています。

itemLabel="#{p.lastName} #{p.firstName} " itemValue="#{p}" converter="player">

閉じ引用符の前の itemLabel の #{p.firstName} の後にスペースがあります。

透かしについては、わかりません。オートコンプリートで試したことはありません。p:watermark タグを含めて、それが何を参照しているかを確認できますか?

于 2012-07-13T20:11:27.663 に答える