基于字符串检索 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、asVariable。如果你做了类似的事情,那么你也许可以检查你的变量名并选择正确的范围。但我这样做的原因是我曾经遇到过某种范围冲突。我忘记了当时的情况。但请记住,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
我正在修改当前正在执行的现有代码
currentDocument.setValue("field", requestScope.variable);
这很好用,但我现在需要让它更动态一点,所以我将 requestScope.variable
存储为字符串。我知道我能做到:
requestScope["variable"]
但这取决于我知道它在哪个范围内。鉴于字符串可能是 requestScope.variable
甚至 applicationScope.variable
我认为这条路线对我关闭。
我也想过根据 .但认为必须有一个更直接的选择。
我该怎么做?
嗯,我从来没有见过 requestScope["variable"] 虽然这很有意义。我通常使用 requestScope.get("variable").
之类的东西我的范围变量也总是有一个前缀来指示范围。 rsVariable、ssVariable、vsVariable、asVariable。如果你做了类似的事情,那么你也许可以检查你的变量名并选择正确的范围。但我这样做的原因是我曾经遇到过某种范围冲突。我忘记了当时的情况。但请记住,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