我在 XPage 中遇到了奇怪的行为,并带有注释代码。
我有一个文本字段,里面有很多代码,在我遇到这个问题的地方输出 html。 在开发过程中,我在某些字段和其他字段上遇到了很多麻烦,因此我决定 - 为了更好地了解该字段正在做什么 - 将代码从麻烦字段复制到我的文本字段内的注释中,以便让其他代码在我的视线中。但随后 xPage 开始表现得很奇怪,直到我发现了问题。
下面的代码是导致我的问题的一个示例,它有两个文本字段,一个设置范围变量,还有一个注释设置相同的变量但已注释,另一个显示范围变量。我以为这会在第二个文本框中输出“我在哪里”,但我得到的是“呼呼我在这里”。
<xp:text escape="true" id="computedField7">
<xp:this.value><![CDATA[#{javascript://
sessionScope.put("findme","where i am");
/* #{javascript:sessionScope.put("findme","HuHu I am here!");} */
return sessionScope.findme;}]]></xp:this.value>
</xp:text>
<xp:br></xp:br>
<xp:text escape="true" id="computedField6"
value="#{javascript:return sessionScope.findme;}">
</xp:text>
在我遇到这个问题的原始代码中,我想注释掉旧的 #{} el 以使用 JavaScript,但将 el 保留在代码中间的注释中..结果相同。看来如果您在评论中使用 #{ 或 ${ ,它总是会被计算!
在注释 9 中修复了这个问题。我目前使用的是 8.5.3。
更新:
需要注意的是:使用 dojoAttribute queryExpr 时要小心,因为查询看起来像 SSJS "${0}"
并且也会被解释为 SSJS。我现在用这个:
<xe:this.queryExpr><![CDATA[${javascript:"*$\{0}*";}]]></xe:this.queryExpr>
使其发挥作用。感谢Paul Stephen Withers对于带有 \{
.
最佳答案
这是一个有趣的错误。
这是由 JavaScript 解释器的预处理器功能引起的。通常,您可以在 CSJS 代码中编写 #{javascript:...}
来替换部分代码在放入呈现页面之前。
就你而言,它是 SSJS。同样,解释器替换了 SSJS 代码中的 #{javascript:...}
并认为工作已经完成。这样您就可以看到渲染页面上的代码而不是执行代码的结果。
作为解决方法,只需从 /* #{javascript...
中删除 #
即可,它将按预期工作。
关于xpages - 为什么 xPage 处理我的评论就好像它们没有处理一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19679079/