Xpages 为什么xPage处理我的评论时好像它们不是';T

Xpages 为什么xPage处理我的评论时好像它们不是';T,xpages,Xpages,我在XPage中有一个奇怪的行为,带有注释代码 我有一个文本字段,里面有很多代码,在我遇到这个问题的地方输出html。 在开发过程中,我在一些字段和其他字段上遇到了很多麻烦,因此我决定——为了更好地了解该字段正在做什么——将代码从troublefields复制到textfield中的注释中,以便看到其他代码。但是,xPage开始表现出奇怪的行为,直到我发现了问题 下面的代码是导致我的问题的一个示例,其中有两个文本字段,一个设置了范围变量,还有一个注释设置了相同的变量但已注释,另一个显示了范围变量

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

我有一个文本字段,里面有很多代码,在我遇到这个问题的地方输出html。 在开发过程中,我在一些字段和其他字段上遇到了很多麻烦,因此我决定——为了更好地了解该字段正在做什么——将代码从troublefields复制到textfield中的注释中,以便看到其他代码。但是,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>
让它工作。感谢您提供的
\{

提示,这是一个有趣的bug

这是由JavaScript解释器的预处理器功能引起的。通常,您可以在CSJS代码中编写
{JavaScript:…}
,以替换部分代码,然后将其放入呈现页面

在您的例子中,它是SSJS。同样,解释器替换SSJS代码中的
{javascript:…}
,并认为工作已经完成。这样,您可以在呈现页面上看到代码,而不是执行代码的结果


作为一种解决方法,只需从
/*.{javascript…
中删除
.
,它就会像预期的那样工作。

在您的示例中,是否有理由将{javascript:…}嵌套在{javascript:…}中。我强烈建议不要这样做,我不希望它会产生好的结果

请看我的回答。我想你期望它以一种非设计的方式工作,不太可能被改变为工作

属性只是在运行时从左到右读取的字符串。如果找到“#{javascript:”、“${javascript:”或“#{..”,则运行生成的代码。将“/”或“/”或“/”和“/”任意一方包装都没有效果,我也不希望有效果。整个字符串不会传递给解析器,只传递“#{javascript”后面的位

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


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

是的,它似乎真的是一个bug…我做了一些进一步的实验,它打开了新的注释编码方式=),我已经从我的注释中删除了#和$以使代码正常工作,但我有种分享这种有趣行为的感觉。我知道可以使用#{javascript:ssjsCode}在ClientSideScript中,我也知道使用${javascript:return'#{viewScope.biding}}}可以创建动态值绑定,但在我看来,解释器在注释中计算我的代码是一个很大的问题,尽管它们是转义的(//、/***/或/***/)。您使用的是Notes 8.5还是9?我使用的是8.5.3。-这肯定是SSJS的一个错误。它不应该运行预处理器,只执行完整的代码。对于CSJS来说,它实际上非常有用,它可以替换
{…}
代码,无论它在哪里。这样就可以替换字符串中的代码,如
myFunction(“in”)_#{javascript:…}{u-between”)
。通过这种方式,您还可以动态更改CSJS代码中的注释,并在其中放入例如计算id。但是,忽略注释中的所有
{…}
会更安全。使用{javascript:ini的原因如下:#{javaScript只是想看看它是否有效。我在不使用编辑器对话框编写SSJS代码时发现了“问题/功能”。我只是在sourcetab中编辑了一小行代码。我需要将${切换到#{并注释掉另一行代码(以显示更改)。这就是我遇到的问题。
<xe:this.queryExpr><![CDATA[${javascript:"*$\{0}*";}]]></xe:this.queryExpr>