1

我们正在使用 Primefaces 2.2.1。我们正在使用自动完成来显示数据库中的名称。一些名字有'&'作为它的一部分。例如:杰克和吉尔。

当我们在自动完成中输入 & 时,建议会在 '&' 之前的字符处停止。

姓名:杰克和吉尔、杰基、杰克和比尔、杰克和珍。

当键入“Jack”时,我们会在建议列表中获得上述所有名称。而当我们输入“Jack &”时,我们仍然得到相同的列表,而不是缩小到“Jack & Jill”、“Jack & Bill”、“Jack & Jen”

当我们调试传递给完整方法的内容时,我们注意到只传递了 '&' 之前的字符。例如:“杰克”。

在 '&' 之后键入的任何内容,包括 '&' 本身都不会传递给完整的方法。我们从 Primefaces 论坛之一找到使用转换器,但仍然没有用。请尽快提出建议,因为这是一个需要尽快解决的非常关键的问题。

这是bean代码。

public List<String> complete(String nameQuery)
{ 
   List<String> names = new ArrayList<String>(“Jack & Jill”, “Jackie”, “Jack & Bill”, “Jack & Jen”);
   List<String> suggestedNames= new ArrayList<String>(); 

   for (String name : names) { 
      if (name.toLowerCase().trim().startsWith(nameQuery.toLowerCase().trim())) 
      { 
         suggestedNames.add(name.toUpperCase()); 
      } 
   } 
   return suggestedNames; 
} 

Xhtml代码

<p:autoComplete id="stName" 
   value="#{webBean.personVO.name}" 
   completeMethod="#{webBean.complete}" 
   selectListener="#{webBean.updateSelectedName}" 
   onSelectUpdate="name" 
   maxResults="10">

提前致谢。

4

2 回答 2

0

尝试将 onstart 属性添加到调用 javascript 函数的 p:autocomplete 标记中,以对作为查询传递给完整方法的字符进行编码:

<script type="text/javascript"> function escapeTerm(request) { request.term = encodeURIComponent(request.term); } </script>

<p:autoComplete id="stName" value="#{webBean.personVO.name}" onstart="escapeTerm(request)" completeMethod="#{webBean.complete}" selectListener="#{webBean.updateSelectedName}" onSelectUpdate="name" maxResults="10">

于 2013-06-24T15:48:25.320 回答
0

来自:http ://code.google.com/p/primefaces/issues/detail?id=6378

这个解决方案对我添加到我的 JSF 页面很有用:

<script type="text/javascript">
    PrimeFaces.escapeRegExpOld = PrimeFaces.escapeRegExp;
    PrimeFaces.escapeRegExp = function (c){
        var t = PrimeFaces.escapeRegExpOld(c);
        t = t.replace('&amp;', '&amp;amp;');
        return t;
    }
</script>
于 2014-11-11T18:50:15.433 回答