Почему некоторые HTTP-запросы для Primefacesвернуть 0 байтов, в то время как другие работают? - PullRequest
2 голосов
/ 05 марта 2019

В веб-приложении PrimeFaces я заменил предыдущую стратегию загрузки изображений (которая заключалась в временном сохранении файлов изображений в каталог webapps/ Tomcat и обращении к ним через <img src="...">, что работало) с помощью <p:graphicImage>. Очень много изображений галереи распечатываются в цикле с передачей идентификатора . Для более или менее большого количества изображений иногда загружается 90% изображений, иногда (особенно если я устанавливаю точку останова в методе получения, возвращающем объект StreamedContent) только один. Какие и сколько изображений загружаются абсолютно случайно.

Image of gallery with some images loading, others not

Поскольку различные изображения делают загрузки (также в их правильном положении), я предполагаю, что мое основное кодирование не может быть слишком неправильным. Некоторый отладочный вывод в этом методе показал мне, что метод получения, который возвращает StreamedContent, вызывается во второй фазе именно для изображений, которые представлены. Для изображений, которые не отображаются, оно не вызывается. В сетевой панели Firefox соответствующие HTTP-запросы были отправлены и возвращены с 0 байтами:

enter image description here

Я не получаю никаких исключений или трассировки стека нигде, ни на сетевой консоли, ни в своих журналах, хотя я установил для корневого регистратора отладку. (У меня длинный журнал , но мне ничего не объясняет.) Где или почему некоторые HTTP-запросы не отвечают правильно?

Это код JSP , который генерирует галерею:

<p:dataList styleClass="structureElementDataList"
            id="structureElementDataList"
            var="media"
            value="#{stripe.medias}"
            binding="#{structuredThumbnail}">
    <p:panel id="structuredPagePanel">
        <p:commandLink update="structureTreeForm, imagePreviewForm">
            <div class="thumbnail-container">
                <p:graphicImage value="#{DataEditorForm.galleryPanel.previewData}" class="thumbnail #{DataEditorForm.galleryPanel.selectedMedia eq media ? 'active' : ''}" rendered="#{media.showingInPreview}">
                    <f:param name="id" value="#{media.id}" />
                </p:graphicImage>
                <div class="thumbnail-overlay">
                    #{msgs.image} #{media.order}, #{msgs.page} #{media.orderlabel}
                </div>
            </div>
            <f:setPropertyActionListener value="#{media}" target="#{DataEditorForm.galleryPanel.selectedMedia}"/>
            <f:setPropertyActionListener value="#{stripe}" target="#{DataEditorForm.galleryPanel.selectedStripe}"/>
        </p:commandLink>
    </p:panel>
    <p:draggable id="structuredPagesDraggable" for="imagePreviewForm:structuredPages:#{currentElement.rowIndex}:structureElementDataList:#{structuredThumbnail.rowIndex}:structuredPagePanel"
                 revert="true" stack=".ui-panel"/>
</p:dataList>

Вот Ява :

public StreamedContent getPreviewData() {
    FacesContext context = FacesContext.getCurrentInstance();
    if (context.getCurrentPhaseId() != PhaseId.RENDER_RESPONSE) {
        String id = context.getExternalContext().getRequestParameterMap().get("id");
        GalleryMediaContent mediaContent = previewImageResolver.get(id);
        if (Objects.nonNull(mediaContent)) {
            return mediaContent.getPreviewData();
        }
    }
    return new DefaultStreamedContent();
}

Но, как я уже сказал, этот код работает частично, поэтому я не вижу, что я делаю неправильно. Имеет ли Tomcat или JSF ограничение на запросы, которые мне нужно увеличить? Поскольку я загружаю только одно изображение, если я устанавливаю точку останова, это выглядит как проблема синхронизации. (В этой точке останова также останавливается не так много потоков, как я ожидал, но только один.)

Версии программного обеспечения:
Java 8.114
Tomcat: 8.0.52
MySQL: 5.7.19
ElasticSearch: 5.6.1
OmniFaces: 2.6.3
SpringFaces: 2.4.5. RELEASE
MyFaces: 2.2.12
PrimeFaces: 6,2
Расширения PrimeFaces: 6.1.1
Спящий режим: 5.3.7. Финал
Платформа: Windows 10

...