Xpages 如何在Java中向作用域变量添加JSON对象?

Xpages 如何在Java中向作用域变量添加JSON对象?,xpages,Xpages,我在applicationScope、sessionScope和viewScope中使用了许多JSON对象来跟踪相关数据。在SSJS中编写和阅读这些内容非常简单:` //Create a app scope variable applicationScope.put("myvarname", {p1:"part 1", p2:"part2"}); // read and use the app scope variable ... var myvar = applicationScope.ge

我在applicationScope、sessionScope和viewScope中使用了许多JSON对象来跟踪相关数据。在SSJS中编写和阅读这些内容非常简单:`

//Create a app scope variable
applicationScope.put("myvarname", {p1:"part 1", p2:"part2"});

// read and use the app scope variable ...
var myvar = applicationScope.get("myvarname");
//Work with parts as myvar.p1, myvar.p2, etc...
在我编写的Java代码中,我学会了阅读这些变量,这些变量是使用SSJS编写的,使用com.ibm.jscript.std.ObjectObject包编写的,代码如下:

ObjectObject myvar = (ObjectObject) ExtLibUtil
        .getApplicationScope().get(dbkey);
FBSValue localFBS = myvar.get("p1");
String myp1 = localFBS.stringValue();
localFBS = myvar.get("p2");
String myp2 = localFBS.stringValue();
现在,当然,我想使用JavaBean编写一个新条目,然后SSJS和其他JavaBean可以以相同的方式读取该条目。我设法使用映射和哈希表写入作用域,但当尝试使用ObjectObject读取时,这些会使逻辑崩溃

那么,我如何使用ObjectObject和/或FBSValue包在范围中构建一个新条目呢?我找不到如何创建新的FBS值,然后将其添加到ObjectObject。我相信像我这样的新手错过了一件简单的事情


/Newbs

您可以构造一个空的ObjectObject,用FBS值填充它,然后直接将其放入范围映射中:

objectobjectmyvar=newobjectobject();
试一试{
myvar.put(“p1”,FBSUtility.wrap(“第1部分”);
myvar.put(“p2”,FBSUtility.wrap(“第2部分”);
}捕获(异常e){
e、 printStackTrace();
}
Map applicationScope=ExtLibUtil.getApplicationScope();
applicationScope.put(“myvarname”,myvar);
稍后检索时(如您提供的示例中所示),SSJS会将其视为JSON,Java会将其视为与存储时完全相同的内容

如果需要存储更深层的层次结构,除了原语之外,还可以将ArrayObject和ObjectObject的实例放在ObjectObject中,因此,就像JSON本身一样,可以根据需要将它们嵌套到任意深度


只要确保只包含真正的JSON(字符串、数字、布尔值、数组、对象),如果您要将其存储在高于requestScope的任何位置;具体来说,FunctionObject不实现可序列化,因此JSON可以安全存储,JavaScript则不能。严格地说,只有当存储在8.5.2和8.5.3中的viewScope中时(即使如此,只有当应用程序的持久性选项未设置为将所有页面保留在内存中时),这才会变得有害。但如果IBM实现了集群支持,那么存储在sessionScope和applicationScope中的所有对象都需要可序列化,以允许服务器间状态传输。。。因此,为了将来验证设计,明智的做法是,对于存储时间超过单个请求持续时间的任何东西,都要坚持这一原则。

谢谢Tim,我知道你已经找到了答案。FBS的东西似乎有很多用途。那么,“FBS”代表什么?它可以记录在哪里?FBS代表“framebuilder脚本”;在它成为XPages的一部分之前(甚至在后来的XPages被称为XFaces之前),SSJS引擎是FrameBuilder的一部分,IBM收购了FrameBuilder用于Workplace。当工作场所崩溃时,他们试图找出哪些可以被打捞起来用于其他地方。XFaces显然有一些价值,所以他们尝试将其添加到Domino中。。。我们到了。但是,毫不奇怪,组件Javadoc中不包括FBSValue及其子代: