我正在开发一个应用程序,我正在创建一个java.util.TreeMap
,其中包含从应用程序的各种其他文档中提取的数据,然后将treemap
分配给sessionsScope变量。这工作正常。
现在我想提供一个功能,我需要将此地图存储在NotesDocument
。
但是当我尝试这样做时,我收到了一个错误。
var doc:NotesDocument = database.createDocument();
doc.replaceItemValue("Form","testForm");
print("json = "+sessionScope.get("Chart_Map"));
doc.replaceItemValue("Calender_Map",sessionScope.get("Chart_Map"));
doc.save();
例外:
执行JavaScript动作表达式时出错 脚本解释器错误,line = 4,col = 13:[TypeError]发生异常调用方法NotesDocument.replaceItemValue(string,java.util.TreeMap)null **
是否可以在java.util.TreeMap
字段中存储notesdocument
?
如果是,那么如何实现?
如果不是那么为什么不呢?与serializability
有什么关系?
答案 0 :(得分:5)
除非使用MimeDomino文档数据源,否则不能将Java对象存储在Document字段中 http://www.openntf.org/main.nsf/blog.xsp?permaLink=NHEF-8XLA83
甚至更好的内置了这个功能的新openntf Domino API http://www.openntf.org/main.nsf/project.xsp?r=project/OpenNTF%20Domino%20API
使用MimeStorage
答案 1 :(得分:0)
Fredrik是对的,MimeDomino最有意义。如果你还没准备好,并且你的字段对于普通的Notes项目来说不是太大,你可以使用Sven建议的CustomDataBytes - 或者通过继承TreeMap来使用JSON。它看起来像这样:
import java.util.TreeMap;
import java.util.Vector;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import lotus.domino.Item;
import lotus.domino.NotesException;
public class TreeMapItem extends TreeMap<String, String> {
private static final long serialVersionUID = 1L;
public static TreeMapItem load(Item source) throws JsonSyntaxException, NotesException {
Gson g = new Gson();
TreeMapItem result = g.fromJson(source.getText(), TreeMapItem.class);
return result;
}
public void save(Item target) throws NotesException {
Gson g = new Gson();
target.setValueString(g.toJson(this));
}
}
我使用Google的Gson,这很简单,但您可能需要将其部署为插件,以便Java安全性能够正常运行。在XPages中也有JSON构建 - 多做一点工作。另一种方法是在Domino中使用2个字段,一个用于加载键,一个用于值 - 这与经典的Domino实践一致。
第三种方法是存储使用管道符分隔的值:
@SuppressWarnings({ "unchecked", "rawtypes" })
public void saveCompact(Item target) throws NotesException {
Vector v = new Vector();
for (Map.Entry<String, String> me : this.entrySet()) {
v.add(me.getKey()+"|"+me.getValue());
}
target.setValues(v);
}
@SuppressWarnings("rawtypes")
public static TreeMapItem loadCompact(Item source) throws NotesException {
TreeMapItem result = new TreeMapItem();
Vector v = source.getValues();
for (Object o : v) {
String[] candidate = o.toString().split("|");
if (candidate.length > 1) {
result.put(candidate[0], candidate[1]);
}
}
return result;
}
告诉我们它是如何为您服务的