自动完成功能在某些情况下无效

时间:2012-07-13 14:54:17

标签: jsf-2 primefaces

我正在使用带有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}否则无法在自动填充中显示水印。
  2. 3.当我用于无案例敏感输入时,用户可以在不区分大小写的情况下进行搜索, 一旦我得到任何建议,仍然尝试输入一些关键字进行进一步的过滤, 建议消失,如果我以默认方式使用区分大小写,它会起作用。

    1. 用户可以输入玩家的姓氏或名字,但仍然需要得到建议,我需要在以下方法中做些什么修改? 我已将姓氏与First字母一起存储为Capital,因此我以这种方式使用toUpperCase()

      public List completePlayer(String query){
              列表建议= new ArrayList();

          for(Player p : players) {  
              if(p.getlastName().startsWith(query.toUpperCase()))  
                  suggestions.add(p);  
          }  
      
          return suggestions;  
      } 
      
    2. 我如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

你的玩家比较正在解决这个问题:
Smith.startsWith(“S”) - &gt;真正
Smith.startsWith(“SM”) - &gt;假

你想要的是:

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

自动填充中的空间来自此行:

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

在结束报价之前,itemLabel中的#{p.firstName}后面有一个空格。

至于水印,我不知道。我从来没有尝试过自动完成功能。你可以加入你的p:watermark标签,这样我们就可以看到它所引用的内容了吗?