我在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...
Run Code Online (Sandbox Code Playgroud)
在我编写的Java代码中,我学会了读取这些使用com.ibm.jscript.std.ObjectObject包使用SSJS编写的变量,代码如下:
ObjectObject myvar = (ObjectObject) ExtLibUtil
.getApplicationScope().get(dbkey);
FBSValue localFBS = myvar.get("p1");
String myp1 = localFBS.stringValue();
localFBS = myvar.get("p2");
String myp2 = localFBS.stringValue();
Run Code Online (Sandbox Code Playgroud)
当然,现在,我想使用Java Bean编写一个新条目,然后SSJS和其他Java Bean可以以相同的方式读取它.我设法使用Map和Hashtable写入作用域,但是在尝试使用ObjectObject读取时会破坏逻辑.
那么,我如何使用ObjectObject和/或FBSValue包在范围内构建新条目?我找不到如何创建一个新的FBSValue,然后可以将其添加到ObjectObject.我相信像我这样的Newbs错过了一件简单的事情.
/ Newbs
我使用一个函数来访问配置文档:
private Document lookupDoc(String key1) {
try {
Session sess = ExtLibUtil.getCurrentSession();
Database wDb = sess.getDatabase(sess.getServerName(), this.dbname1);
View wView = wDb.getView(this.viewname1);
Document wDoc = wView.getDocumentByKey(key1, true);
this.debug("Got a doc for key: [" + key1 + "]");
return wDoc;
} catch (NotesException ne) {
if (this.DispLookupErrors)
ne.printStackTrace();
this.lastErrorMsg = ne.text;
this.debug(this.lastErrorMsg, "error");
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
在另一种方法中,我使用此函数来获取文档:
Document wDoc = this.lookupDoc(key1);
if (wdoc != null) {
// do things with the document
wdoc.recycle();
}
Run Code Online (Sandbox Code Playgroud)
当我回收Document对象时,我应该回收数据库和View对象吗?或者应该在函数返回Document之前回收它们?
xpages ×2