Jsf Primefaces自动完成不传递&到完成方法
我们使用的是Primefaces 2.2.1。 我们使用自动完成来显示数据库中的名称。有些名称中有&。例如:杰克和吉尔 当我们在autocomplete中键入&时,建议将以“&”前面的字符停止 姓名:杰克和吉尔,杰克,杰克和比尔,杰克和珍 杰克,当我们打字时,我们会在建议列表中找到上面所有的名字。 然而,当我们输入Jack&时,我们仍然得到相同的列表,并且没有缩小到 “杰克和吉尔”,“杰克和比尔”,“杰克和珍” 当我们调试传递给complete方法的内容时,我们注意到只传递了“&”之前的字符。例如:“杰克” 在“&”之后键入的任何内容(包括“&”本身)都不会传递给complete方法。我们从一个Primefaces论坛上发现可以使用转换器,但仍然没有用。请尽快提出建议,因为这是一个非常关键的问题,需要尽快解决 下面是bean代码Jsf Primefaces自动完成不传递&到完成方法,jsf,primefaces,autocomplete,Jsf,Primefaces,Autocomplete,我们使用的是Primefaces 2.2.1。 我们使用自动完成来显示数据库中的名称。有些名称中有&。例如:杰克和吉尔 当我们在autocomplete中键入&时,建议将以“&”前面的字符停止 姓名:杰克和吉尔,杰克,杰克和比尔,杰克和珍 杰克,当我们打字时,我们会在建议列表中找到上面所有的名字。 然而,当我们输入Jack&时,我们仍然得到相同的列表,并且没有缩小到 “杰克和吉尔”,“杰克和比尔”,“杰克和珍” 当我们调试传递给complete方法的内容时,我们注意到只传递了“&”之前的字符。例
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代码
提前感谢。尝试将onstart属性添加到p:autocomplete标记,该标记调用javascript函数对作为查询传递给complete方法的字符进行编码: 函数转义器请求{ request.term=encodeURIComponentrequest.term; } 来自: 这个解决方案对我来说很有用,它添加到了我的JSF页面中:
<script type="text/javascript">
PrimeFaces.escapeRegExpOld = PrimeFaces.escapeRegExp;
PrimeFaces.escapeRegExp = function (c){
var t = PrimeFaces.escapeRegExpOld(c);
t = t.replace('&', '&amp;');
return t;
}
</script>
我认为您应该发布自动完成bean代码,以便更好地了解您的问题。public List completeString nameQuery{List name=new ArrayList“Jack&Jill”、“Jackie”、“Jack&Bill”、“Jack&Jen”;List suggestedNames=new arrarylist;字符串名称:{if name.toLowerCase.trim.startsWithnameQuery.toLowerCase.trim{suggestedNames.addname.toUpperCase;}}返回suggestedNames;}Xhtml代码如果您通过在文章中插入代码来编辑文章,这将有助于阅读文章。将代码以更可读的格式添加到文章中。
<script type="text/javascript">
PrimeFaces.escapeRegExpOld = PrimeFaces.escapeRegExp;
PrimeFaces.escapeRegExp = function (c){
var t = PrimeFaces.escapeRegExpOld(c);
t = t.replace('&', '&amp;');
return t;
}
</script>