0

我正在使用带有 itemtip 选项的 primefaces 自动完成组件,在得到建议后,我选择了一个值作为示例姓氏,但我想在文本框中显示玩家的姓氏和名字,所以以这种方式尝试。

itemLabel="#{p.lastName} #{p.firstName} "与这两个有一些空间。

<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. 我也在自动完成上使用水印,它仅在我使用像 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 回答