xe:objectData - 已删除或回收对象

时间:2012-04-11 11:39:57

标签: xpages xpages-extlib

我使用xe:objectData作为xp:dataTable的数据源。 objectData1使用一些Java代码从视图中检索与键(用户名)匹配的所有文档。 Java代码如下所示:

package com.isatweb.cois;

import static com.ibm.xsp.extlib.util.ExtLibUtil.getCurrentDatabase;
import static com.ibm.xsp.extlib.util.ExtLibUtil.getCurrentSession;

import java.io.Serializable;

import lotus.domino.Database;
import lotus.domino.Name;
import lotus.domino.Session;
import lotus.domino.View;
import lotus.domino.ViewEntryCollection;

public class ObjectDataVisits implements Serializable {

    private static final long serialVersionUID = 1L;

    ViewEntryCollection vec = null;
    public ObjectDataVisits(){
        try {
            this.update();
        } catch (Exception e) {
            System.out.print(e);
        }
    }

    public void update()  {
        try {
            Database _db = getCurrentDatabase();
            Session _session = getCurrentSession();
            Name nam = _session.createName(_session.getEffectiveUserName());
            String username = nam.getAbbreviated().replace(" ", "#").replace("/", "#").toUpperCase();
            View view = _db.getView("vw_visit_open");
            this.vec = view.getAllEntriesByKey(username);

        } catch (Exception e) {
            System.out.print(e);
        }
    }

    public ViewEntryCollection getVisits(){
                return this.vec;
    }
}

XPage具有以下代码 enter image description here

当我第一次加载页面时,数据从wiew中读取,dataTable显示所有匹配文档的NoteID。 当我使用按钮刷新页面时,我收到“对象已被删除或回收”错误。 任何人都可以。告诉我我做错了什么? (也许,如何正确行事)

1 个答案:

答案 0 :(得分:4)

问题是,Notes对象不可序列化。在部分刷新期间, getVisits()方法在更新()方法之前执行。 ViewEntryCollection是对视图的引用,此视图已被回收。

如果您只想存储一些音符ID,那么您可以将它们存储在Vector中。否则,您每次都必须在 getVisits()方法中调用 update()方法。