【问题标题】:Autocomplete not working in some condtion自动完成在某些情况下不起作用
【发布时间】:2012-07-13 14:54:16
【问题描述】:

我正在使用带有 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 时才有效 itemLabel="#{p.lastName} 否则无法在自动完成中显示水印。

3.此外,当我使用不区分大小写的输入时,用户可以在不区分大小写的情况下进行搜索, 一旦我得到任何建议并且仍然尝试输入一些关键工作以进行进一步过滤, 建议消失,如果我默认区分大小写,它会起作用。

  1. 用户可以输入玩家的姓氏或名字,但他仍然需要得到建议,我需要在以下方法中进行哪些修改? 我已将姓氏与首字母作为大写字母存储,因此我以这种方式使用 toUpperCase()

    公开列表完成播放器(字符串查询){
    列表建议 = new ArrayList();

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

我该如何克服这个问题?

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案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 标记,以便我们查看它所引用的内容?

    【讨论】:

    • 我已经删除了itemlabel之间的空格,现在我已经尝试过这种方式。 itemLabel="#{p.lastName} #{p.firstName}" itemValue="#{p}" converter="player"> 但它仍然在自动完成文本框中创建了一个空格,所以我们需要使用退格键来删除它空间。这个空间现在来了,因为 #{p.lastName} 和 #{p.firstName}" 之间有空间。实际上我需要在选择建议后保留姓氏和名字之间的空间。所以我们仍然如何删除它步伐/?
    • 哦,我想我明白你的问题是什么了。因为在页面呈现时 LastName 和 FirstName 是空白的,所以它只在该字段中放置空格。我能想到的最简单的解决方案是将 FullName getter 和 setter 添加到您的支持 bean 并在那里而不是在前端进行名称聚合。然后您将能够控制何时/是否添加空间。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2018-11-28
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多