为什么xPage处理我的评论

时间:2013-10-30 09:58:29

标签: xpages

我在XPage中有一个奇怪的行为,注释了代码。

我有一个带有大量代码的文本字段,输出html,我遇到了这个问题。 虽然开发我在其他领域的某些领域遇到了很多麻烦所以我决定 - 更好地了解该领域正在做什么 - 将故障区域的代码复制到我的文本区域内的注释,以便在我看来有其他代码。但后来xPage开始表现得很奇怪,直到我找到了问题。

下面的代码是导致我的问题的一个例子,它有两个文本字段,其中一个设置范围var,还有一个注释,它设置相同的var但注释,另一个显示ScopeVar。我以为这会输出'我在哪里'在文本框中,但我得到'Huhu我在这里'。

        <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评论..同样的resault。如果你在评论中使用#{或$ {它会随时计算!

在笔记9中得到了这个fiexed。我目前正在使用8.5.3。

更新 作为一个小注释:在使用dojoAttribute queryExpr时要小心,因为查询看起来像SSJS "${0}",并且也被解释为SSJS。我现在用这个:

<xe:this.queryExpr><![CDATA[${javascript:"*$\{0}*";}]]></xe:this.queryExpr>

让它发挥作用。感谢Paul Stephen Withers提示\{

2 个答案:

答案 0 :(得分:1)

这是一个有趣的错误。

它是由JavaScript解释器的预处理器功能引起的。通常,您可以在CSJS代码中编写#{javascript:...}来替换部分代码,然后再将放入渲染页面。

在你的情况下是SSJS。同样,解释器替换了SSJS代码中的#{javascript:...},并认为工作已经完成。这样您就可以看到渲染页面上的代码,而不是执行代码的结果。

rendered page

作为一种解决方法,只需从#删除/* #{javascript...,它就会按预期工作。

答案 1 :(得分:1)

在您的示例中,是否有#{javascript:...}嵌套在#{javascript:...}内的原因。我强烈建议不要这样做,我不希望它能给出好的结果。

请参阅stopping getClientId() computations in JS code的答案。我认为你期望它以一种不设计的方式工作,不太可能改变工作。

属性只是在运行时从左到右读取的字符串。如果找到“#{javascript:”,“$ {javascript:”或“#{..”,则会运行生成的代码。在它们周围环绕“//”或“/ ”和“ /”任何一方都没有效果,我也不期望它。整个字符串不会传递给解析器,只是“#{javascript”。

之后的位

这样做的好处是你可以通过组合语言来获得更好的性能,因为只有部分语言被传递给解析器和文字字符串(这就是“/ *”位)只是传递给浏览器,因为它是。这意味着您可以在单个值中包含EL和SSJS。如果您正在寻找改变,我不确定您是否能够做到这一点。

对于queryExpr,我建议使用$ {javascript:“ $ {0} ”}代替 - 只需转义{。请参见p121 XPages扩展库。