PrimeFaces ExternalContext ответчик конкретный тип - PullRequest
0 голосов
/ 26 ноября 2018

Я смотрю на экспорт CSV из Java-приложения, используя JBoss и PrimeFaces.Экспорт - это прямой вызов из таблицы данных на веб-странице в реализацию PrimeFaces DataExporter и CSVExporter.Я могу проследить все это достаточно разумно, но это начинается с получения типа писателя из внешнего контекста контекста PrimeFaces

public void export(FacesContext context,...    
    ExternalContext externalContext = context.getExternalContext();
    configureResponse(externalContext, filename, encodingType);
    Writer writer = externalContext.getResponseOutputWriter();

    ...
    else {
        exportAll(context, table, writer);
    }
    ...             
    writer.flush();
    writer.close();
}

Мне было интересно, как я могу найти конкретный класс писателя?

Моя конечная игра в этом заключается в том, чтобы просто понять, весь ли экспорт удерживается в памяти кучи до завершения экспорта, что, как я подозреваю, происходит, или есть какой-то фоновый процесс, который мог бы его запустить?

Итак, я предполагаю, что очистка в конце означает, что файл не записан до конца, но меня просто заинтересовал тот факт, что он выполняет построчный вызов приведения к PrintWriter

protected void exportAll(FacesContext context, DataTable table, Object document) {
        for(int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
            exportRow(table, document, rowIndex);
        }

    }
}

protected void exportRow(DataTable table, Object document, int rowIndex) {
    table.setRowIndex(rowIndex);
    ...
    exportCells(table, document); 
    ...
}

@Override
protected void exportCells(DataTable table, Object document) {
    PrintWriter writer = (PrintWriter) document;

    for (UIColumn col : table.getColumns()) {
            'write cell (no flush)           }
    }
}

Есть много сообщений о людях, имеющих проблемы с Excel, но ни одного с CSV.Это просто потому, что процесс csv намного менее требователен к ресурсам, или я неправильно его читаю, а память между каждой строкой записи очищается?

...