【发布时间】:2016-06-10 08:58:03
【问题描述】:
从我们当前 Xpages 项目中的所有奇怪之处来看,这个项目目前已经达到了天花板:
我们在当前项目中创建了一些 java bean。在 Domino Designer 中,它们都存储在 Code >> Java 下,因此很明显它们自动成为项目类路径的一部分。我们所有的 bean 都属于一个包结构de.edcom.*(这是我们一直使用的,没有任何问题)。这些对象大多使用完整的包名从 SSJS 调用(由于各种原因未注册为托管 bean),如
var o = de.edcom.myObject.someMethod();
在我以前的任何 Xpages 项目中,这都没有引起任何问题,它只是起作用了。然而,在当前项目中,XSP 运行时突然开始将包名解释为 String 对象,给我们这个运行时错误:
Unknown member 'edcom' in Java class 'java.lang.String'
有问题的 ssjs 代码行如下所示:
return de.edcom.TOC.buildTOC();
我们绝对不知道是什么原因造成的,为什么只在这个项目中,以及为什么它有时可以工作,但大多数情况下没有。
这个项目和之前的其他项目有一个不同之处,那就是本地化:用户可以在“英语”和“德语”语言环境之间切换,当然我们使用的是类似的代码
context.setLocaleString("de")
当然,我们有几个 javascript 代码片段在寻找本地设置,如
if(context.getLocalString()==="de"){...
事实上,今天早上我们已经将所有 java bean 重命名/重构为不同的包名 (com.edcom.*),从那时起错误就没有出现过(手指交叉!)。
但话说回来,我觉得这太愚蠢了,不可能真的有联系,或者可以吗?
编辑:
我尝试将importPackage() 与xe:objectData 数据源结合使用(正如Adrian 和Paul 在他们的回答中所建议的那样),但我仍然收到“unknown member 'edcom' in Java class 'java.lang,String'”消息,现在只是在不同的位置在我的代码中写着importPackage(de.edcom)。
我将切换回“com.edcom”包并继续寻找更好的解决方案;不幸的是,在整个代码中搜索字符串“de”会产生接近 12.000 个匹配项;现在可以在大海捞针中找到真正的原因
编辑 #2:
看起来我们终于找到了可怕的“de”变量:它很好地隐藏在计算出的 customControl 属性中;我不知道为什么我在过去几天执行的所有文件搜索都找不到这个。
无论如何,很高兴知道我们在命名 ssjs 变量时必须更加小心;我从没想过 ssjs 变量名会干扰 Java 包中的 TLD 部分;我们可能会制定内部政策,我们的变量必须命名为“vDe”、“vCom”、“vIt”等,而不仅仅是短小写字母……
【问题讨论】:
-
不要忘记解释这种内部政策的含义。否则,您可能会遇到来自梵蒂冈的变量“vA”和软件包的麻烦:-)
标签: xpages javabeans xpages-ssjs