我们使用的是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">
提前致谢。
答案 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;');
return t;
}
</script>