Primefaces自动完成不通过&完成方法

时间:2013-06-18 20:08:23

标签: jsf primefaces autocomplete

我们使用的是Primefaces 2.2.1。 我们使用自动完成功能来显示数据库中的名称。有些名字有'&'作为其中的一部分。例如:Jack&吉尔。

当我们输入&在自动填充功能中,建议会在“&”之前停止使用。

姓名:Jack&吉尔,杰基,杰克&比尔,杰克&仁。

当键入“Jack”时,我们会在建议列表中获得以上所有名称。 而当我们键入“Jack&”时,我们仍然会得到相同的列表,而不是缩小到 '杰克&吉尔','杰克&比尔','杰克&仁'

当我们调试传递给complete方法的内容时,我们只注意到'&'之前的字符通过。例如:'杰克'。

'&'之后输入的任何内容包括'&'本身没有被传递给完整的方法。我们从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">

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

<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">

答案 1 :(得分: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>