我正在尝试从视图中的文档加载 JSON,并最终显示 dojo 增强的数据网格。大约有 1000 个文档,我需要检查多行数据。这是遗留应用程序,文档可以包含 80 个不同用户的详细信息。所以我的代码在最坏的情况下会生成 80000 Json 行。现在它能够从 980 个文档中加载 70k+ 条记录。我目前的方法是创建整个 JSON 并在浏览器中写入一个 JS 变量,该变量正在工作,但可以预见它的速度很慢。Java 生成 JSON 大约需要 45-80 秒。
我更改了将 NotesDocument 加载为 JSON 并在客户端解析它的方法。这样我的 java 代码只会循环 980 次。我正在使用 document.generateXML() 生成 XML,然后使用 org.json.XML.toJSONObject() 方法(这是来自 json.org jar 文件)将其转换为 JSON。这也有效,但它似乎比第一种方法慢。
我不确定我还能如何将这么多数据加载到浏览器中。
最大的问题是:打开 Xpage 后,Java 代码开始执行很长时间。它在 beforePageLoad 事件上调用。这个我真的很担心。在我打开 xpage 链接后,第一个控制台消息(检查代码开始的日期时间)出现了很长时间。
现在对于数据网格,我只显示 30 行,但问题是由于每个文档有多行数据,在获取所有记录之前,我不能允许用户对网格进行排序/过滤。
这是我当前方法的后端 Java 代码。如果您愿意,我可以发布工作代码(第一种方法)。
import java.io.IOException;
import java.util.*;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.servlet.http.HttpServletResponse;
import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.View;
import com.ibm.xsp.extlib.util.ExtLibUtil;
import com.ibm.commons.util.io.json.*;
import org.json.*;
/**
* @author agnihotri.a
*
*/
public class AccessRequests {
public static void mainly() {
Date dt1 = new Date();
System.out.println(dt1.toString());
System.out.println("here");
Database database = null;
View accReqView = null;
Document accReqDoc = null;
JSONArray jarr = new JSONArray();
//try out JSONObject here
//List <JSONObject> ljo = new ArrayList<JSONObject>();
try {
/**
* we need handle current user session to compute common name in
* user names field
*/
// Session s = ExtLibUtil.getCurrentSession();
database = ExtLibUtil.getCurrentDatabase();
System.out.println("generating grid in : " + database.getFilePath());
accReqView = database.getView("AccessRequestsGrid");
// get access request document
accReqDoc = accReqView.getFirstDocument();
//int counter = 0;
while (accReqDoc != null) {
//counter++;
jarr.put(org.json.XML.toJSONObject(accReqDoc.generateXML()));
//ljo.add(org.json.XML.toJSONObject(accReqDoc.generateXML()));
accReqDoc = accReqView.getNextDocument(accReqDoc);
}
ExtLibUtil.getSessionScope().put("allAccReq", jarr);
//System.out.println(ljo.size());
//System.out.println(counter);
//ExtLibUtil.getSessionScope().put("totDocs", ljo.size());
}
catch (final Exception ex) {
// tbd: handle exception
ex.printStackTrace();
System.out.println(ex.getStackTrace().toString());
// return "An Error occured. Check with IT team.";
} finally {
// recycle domino objects
KillDomObjects.incinerate(accReqDoc, accReqView, database);
final Date dt2 = new Date();
System.out.println(dt2.toString());
}
}
}