• 🚨 24 часа до повышения цены на курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    Последний день записи в текущий поток по старой цене Подробнее о курсе ...

Poi Зависает После Создания Отчета

  • Автор темы Автор темы Bob84
  • Дата начала Дата начала
B

Bob84

Здравствуйте.
С помощью библиотеки POI создаем отчеты в Excel. После того как пользователю предоставляется файл с результатом, для загрузки, на некоторое время (10-20 сек) в окне перестают работать кнопки и ссылки для перехода на другие Xpage.
Примерный код кнопки, для создания отчета:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">onClick, ServerSide</div></div><div class="sp-body"><div class="sp-content">
C++:
try{	
importPackage(java.lang);
importPackage(org.apache.poi.hssf.usermodel);
importPackage(org.apache.poi.hssf.util);

var sheetName = "Лист1";
var workbookName = "workbook1";

var doc: NotesDocument;

var prevDoc: NotesDocument;	

var wb = new HSSFWorkbook();

var sheet1 = wb.createSheet(sheetName);

var query = "формула отбора"

var dcNotSorted: NotesDocumentCollection = database.search(query);

// <бегаем по коллекции>***************************************
rows=sheet1.getLastRowNum();
var dc: NotesDocumentCollection = SortCollection(dcNotSorted, ["ключ для сортировки"]); 

doc = dc.getFirstDocument();

while (doc != null) {
//обработка документа, создаем строки таблици и заполняем их данными из документа

prevDoc = doc;
doc = dc.getNextDocument(doc);		
}	
// </бегаем по коллекции>***************************************

// <вывод результата>
try {
//Create the filename for the spreadsheet	
var fileName = workbookName + ".xls";
// The Faces Context global object provides access to the servlet environment via the external content
var extCont = facesContext.getExternalContext();
// The servlet's response object provides control to the response object
var pageResponse = extCont.getResponse();
//Get the output stream to stream binary data
var pageOutput = pageResponse.getOutputStream();
// Set the content type and headers
pageResponse.setContentType("application/x-ms-excel");
pageResponse.setHeader("Cache-Control", "no-cache");
pageResponse.setHeader("Content-Disposition", "inline; filename=\"" + fileName + "\"");
//Write the output, flush the buffer and close the stream
wb.write(pageOutput);
} catch (e) {
print(e.toString());
} finally {
pageOutput.flush();
pageOutput.close();
// Terminate the request processing lifecycle.
facesContext.responseComplete();
}
// </вывод результата>
}catch (e) {
view.postScript('alert("' + e.toString() + '")');	
}


Для работы используем следующий jar POI - poi-3.10.1-20140818.jar

Спасибо.
 
Лучше навесь этот код на отдельную страницу.. в событие afterPageLoad.
А по кнопке или ссылке открывай эту страницу
 
Сделал xpage report2Click.xsp, создание отчета повесил на afterPageLoad. На старнице отчета сдела кнопку с кодом:
C++:
context.redirectToPage("report2Click.xsp");

Эффект тот же, пробовал вешать на событие BeforeRenderResponse, при установленом rendered в false - все равно есть подвисание после отработки.
 
Сделал xpage report2Click.xsp, создание отчета повесил на afterPageLoad. На старнице отчета сдела кнопку с кодом:
C++:
context.redirectToPage("report2Click.xsp");

Эффект тот же, пробовал вешать на событие BeforeRenderResponse, при установленом rendered в false - все равно есть подвисание после отработки.
Ну у меня тоже этот метод используется, но проблем никаких.
Но с другой стороны, а почему не должно быть тормозов?
Какой объем данных передается?
 
Объем совершенно незначительный, база тестовая, как правило около десяти документов обрабатывает.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Курс AD