1

我使用 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 有以下代码 在此处输入图像描述

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

4

1 回答 1

4

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

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

于 2012-04-11T12:03:06.423 回答