含'*'字符的视图字符串搜索问题:XPage视图查询结果异常
问题分析
Domino视图搜索语法里,*是通配符,代表匹配任意长度的字符。当产品名称包含字面的*时,直接把它拼进搜索条件会被解析为通配符,而非实际的字符,导致查询逻辑出错,匹配不到正确记录。
解决方案
在将viewScope.product拼接进搜索语句前,需要对其中的*进行转义处理,把*替换为\*,让Domino将其当作普通字符识别。修改后的代码如下:
<xp:this.data> <xp:dominoView var="viewPictures" databaseName="product/demo.nsf" viewName="demo3"> <xp:this.search><![CDATA[#{javascript:var tmpArray = new Array(""); var cTerms = 0; // 转义搜索内容中的*字符 var escapedProduct = viewScope.product ? viewScope.product.replace(/\*/g, "\\*") : ""; tmpArray[cTerms++] = "(FIELD Prod = \"" + escapedProduct + "\")"; return tmpArray.toString(); }]]></xp:this.search> </xp:dominoView> </xp:this.data>
关键说明
- 用
String.replace(/\*/g, "\\*")全局替换所有*为\*,确保每个特殊字符都被正确转义。 - 增加空值判断
viewScope.product ? ... : "",避免viewScope.product为空时出现语法错误。
内容的提问来源于stack exchange,提问作者Marc Jonkers
相关产品推荐
相关产品推荐

