Domino子表单提交搜索请求后Java Agent无法获取搜索词字段值的问题
问题根因
你看到的Bsearchterm参数名,是Domino HTTP引擎自动生成的,不是前端表单传出来的原始值。
Domino引擎处理请求参数时,会按以下规则把参数映射到上下文文档的Item里:
- 属于引擎内置保留参数的(比如
OpenDocument、SearchTop),直接映射为文档Item,不需要目标表单提前定义对应域,这也是你能正常取到这两个值的原因 - 参数名和请求目标表单上预先定义的Notes域完全匹配的,直接映射到对应域,不添加任何前缀
- 既不是内置保留参数,也没匹配到表单上已定义域的参数,引擎会根据参数类型自动加固定前缀,拼接成合成字段名存入上下文文档:普通文本类参数加
B前缀,整数类加I前缀,时间类加T前缀
你现在的情况就是,前端传的searchterm参数,既不是Domino内置保留参数,search-results对应的目标表单上又没提前定义同名的searchterm文本域,所以引擎自动把参数拼接成了Bsearchterm的合成字段名。你之前代码里判断文档有没有searchterm字段自然拿不到值。
落地解决方法
- 最省事的方案:在
search-results所属的表单上,加一个名字完全叫searchterm的文本域,不需要在页面上显示出来,只要表单存在这个域定义就行。加完之后引擎收到同名参数会直接匹配到这个域,不会再加前缀,你原有代码逻辑完全不用改就能正常取到值。 - 不想改表单定义的话,可以直接取引擎生成的合成字段值,把原有取
searchterm的代码换成读Bsearchterm即可:// 适配当前合成字段的取值逻辑 String searchString = curdoc.hasItem("Bsearchterm") ? curdoc.getItemValueString("Bsearchterm") : ""; - 想彻底不受引擎前缀规则影响的话,可以直接从原始HTTP请求中拿参数值,绕开Domino的文档映射逻辑:
// 直接读取原始请求的参数,不管引擎后续怎么改字段名 String searchString = session.getHttpServletRequest().getParameter("searchterm");
踩坑提醒:别想着改前端input的name去适配这个B前缀,这个前缀是引擎后端自己拼的,前端传的还是
searchterm,改前端名字解决不了问题。
内容的提问来源于stack exchange,提问作者AJfromNJ
相关产品推荐
相关产品推荐

