Я пытаюсь загрузить JSON из документов в представлении и в конечном итоге демонстрирую дополнительную сетку данных, дополненную доджо. существует около 1000 документов, и мне нужно проверить несколько строк данных. Это устаревшее приложение, и документы могут содержать сведения о 80 разных пользователях. Таким образом, мой код будет генерировать 80000 строк Json в худшем случае. Сейчас он может загружать записи 70k + из 980 документов. Мой нынешний подход заключается в создании целого JSON и записи в переменной JS в браузере, который работает, но медленный, как ожидается. Для Java для создания JSON требуется около 45-80 секунд.xpages load json из документов
Я изменил подход к загрузке NotesDocument как JSON и проанализировал его на клиенте. Таким образом, мой код java будет проходить только в 980 раз. Я использую document.generateXML() для генерации XML, а затем метод org.json.XML.toJSONObject() (это из jar-файла json.org), чтобы преобразовать его в JSON. Это тоже работает, но кажется, что он медленнее, чем первый подход.
Я не уверен, как еще я могу загрузить эти данные в браузер.
БОЛЬШОЙ вопрос: код Java начинает выполняться очень долго после того, как я открою Xpage. Он вызван событием beforePageLoad. Это я действительно волнуюсь. Первое сообщение консоли (дата начала проверки кода) появляется после того, как я открываю ссылку xpage.
Теперь для datagrid я показываю только 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());
}
}
}
Вы когда-нибудь думали использовать управляемый компонент в области видимости. И перейдите непосредственно JSON от Управляемого компонента EL к datagrid и не храните его intermiddiatly в переменной sessionScope –
Спасибо Frank. Я имею в виду использовать bean-компоненты, но не уверен, как начать esp, потому что я недавно начал использовать xpages в другом устаревшем приложении. Также я не использую управление сетью данных. Я создал его программно, потому что я хотел показать значения столбца в параметрах фильтра, которые каким-то образом не работали с использованием управления додзе extlib. – Arun