基于字符串检索 Xpages 作用域变量

Retrieve Xpages Scoped Variable based on String

我正在修改当前正在执行的现有代码

currentDocument.setValue("field", requestScope.variable);

这很好用,但我现在需要让它更动态一点,所以我将 requestScope.variable 存储为字符串。我知道我能做到:

requestScope["variable"]

但这取决于我知道它在哪个范围内。鉴于字符串可能是 requestScope.variable 甚至 applicationScope.variable 我认为这条路线对我关闭。

我也想过根据 .但认为必须有一个更直接的选择。

我该怎么做?

嗯,我从来没有见过 requestScope["variable"] 虽然这很有意义。我通常使用 requestScope.get("variable").

之类的东西

我的范围变量也总是有一个前缀来指示范围。 rsVariable、ssVariable、vsVariable、a​​sVariable。如果你做了类似的事情,那么你也许可以检查你的变量名并选择正确的范围。但我这样做的原因是我曾经遇到过某种范围冲突。我忘记了当时的情况。但请记住,XPages 对 "resolve the variable" 做了很多事情。我不完全确定我们所说的 "variableRolver" 在 SSJS 中是如何工作的。但是类似于我曾经遇到过这个问题,有可能在不知道范围的情况下以某种方式获取变量。

更糟糕的情况是,只要您的变量具有唯一名称,请记住作用域变量只是 Java HashMap。所以你可以做类似的事情: viewScope.containsKey("ssMyVariable") 所以看看它是否存在于那个范围内。

只是一些快速的想法。

使用${javascript:'requestScope.variable'}获取定义为字符串的作用域变量的值。

你的例子是

currentDocument.setValue("field", ${javascript:'requestScope.variable'});

${javascript:...} 在这里使用预处理器并将结果插入代码。

这是一个完整的例子:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">

    <xp:this.beforePageLoad><![CDATA[#{javascript:
        sessionScope.test = "this is the value of sessionScope.test";
        viewScope.other = "this is the value of viewScope.other";
        requestScope.myScopeVariable = "viewScope.other";
    }]]></xp:this.beforePageLoad>
    <xp:text
        escape="true"
        id="computedField1"
        value="#{javascript:
            var valueFromSessionScope = ${javascript: 'sessionScope.test'};
            var valueFromViewScope = ${javascript: requestScope.myScopeVariable};
            valueFromSessionScope + ' ... ' + valueFromViewScope;
        }">
    </xp:text>
</xp:view>

结果显示:
this is the value of sessionScope.test ... this is the value of viewScope.other