1

xp:dataTable のデータソースとして xe:objectData を使用しています。objectData1 は、いくつかの Java コードを使用して、ビューからキー ( username ) に一致するすべてのドキュメントを取得します。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 には次のコードがあります ここに画像の説明を入力

ページを最初にロードすると、データがビューから読み取られ、dataTable に一致するすべてのドキュメントの NoteID が表示されます。ボタンを使用してページを更新すると、「オブジェクトが削除されたか、リサイクルされました」というエラーが表示されます。誰でもできますか?私が間違っていることを教えてください。(そしておそらく、それを正しく行う方法)

4

1 に答える 1

4

問題は、Notes オブジェクトがシリアル化できないことです。部分的な更新中、getVisits()メソッドはupdate()メソッドのに実行されます。ViewEntryCollection はビューへの参照であり、このビューは既にリサイクルされています。

ノート ID を保存したいだけの場合は、代わりにベクターに保存できます。それ以外の場合は、毎回getVisits()メソッドでupdate()メソッドを呼び出す必要があります。

于 2012-04-11T12:03:06.423 に答える