场景:我想要一种通用方法在 XPage 上的(新)文档数据源中创建读者和作者字段。我现在的方法是将文档从数据源交给 postSaveDocument 事件中的 bean 方法。该方法还可以设置为是否保存文档,具体取决于将要调用的事件(例如 querySaveDocument 事件)。在我的方法中检查和设置的项目在我的数据源的 postNewDocument 事件中设置。奇怪的是,文档没有被保存。在调用 bean 方法后删除。我很惊讶……你有什么想法吗,这里发生了什么?
postNewDocument 事件代码:
document1.setValue("$rnaAuthors", "Foo")
document1.setValue("Foo", "Bar")
postSaveDocument 事件代码:
rna.save(document1.getDocument(true), true)
bean 在我的 faces-config.xml 中配置:
<managed-bean>
<managed-bean-name>rna</managed-bean-name>
<managed-bean-class>com.olb.ReadWriteAccess
</managed-bean-class>
<managed-bean-scope>view</managed-bean-scope>
</managed-bean>
这是豆代码:
package com.olb;
import java.io.Serializable;
import java.util.Vector;
import lotus.domino.Document;
import lotus.domino.Item;
import lotus.domino.NotesException;
public class ReadWriteAccess implements Serializable {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
public void save(Document doc, boolean saveIt) {
try {
// check if special items exist
if (!doc.hasItem("$rnaReaders") && !doc.hasItem("$rnaAuthors"))
return;
// now fetch all the items by name and set the property
Vector v = doc.getItemValue("$rnaReaders");
for (int x = 0; x < v.size(); x++) {
Item it = doc.getFirstItem(v.elementAt(x).toString());
if (it != null) {
if (!it.isReaders())
it.setReaders(true);
}
}
v = doc.getItemValue("$rnaAuthors");
for (int x = 0; x < v.size(); x++) {
Item it = doc.getFirstItem(v.elementAt(x).toString());
if (it != null) {
if (!it.isReaders())
it.setReaders(true);
}
}
if (saveIt) {
doc.save();
}
} catch (NotesException e) {
e.printStackTrace();
try {
if (saveIt) {
doc.replaceItemValue("$rnaError", e.getMessage());
doc.save();
}
} catch (Exception e2) {
}
}
}
}