В веб-приложении PrimeFaces я заменил предыдущую стратегию загрузки изображений (которая заключалась в временном сохранении файлов изображений в каталог webapps/
Tomcat и обращении к ним через <img src="...">
, что работало) с помощью <p:graphicImage>
. Очень много изображений галереи распечатываются в цикле с передачей идентификатора . Для более или менее большого количества изображений иногда загружается 90% изображений, иногда (особенно если я устанавливаю точку останова в методе получения, возвращающем объект StreamedContent
) только один. Какие и сколько изображений загружаются абсолютно случайно.
![Image of gallery with some images loading, others not](https://i.stack.imgur.com/lBsiB.png)
Поскольку различные изображения делают загрузки (также в их правильном положении), я предполагаю, что мое основное кодирование не может быть слишком неправильным. Некоторый отладочный вывод в этом методе показал мне, что метод получения, который возвращает StreamedContent
, вызывается во второй фазе именно для изображений, которые представлены. Для изображений, которые не отображаются, оно не вызывается. В сетевой панели Firefox соответствующие HTTP-запросы были отправлены и возвращены с 0 байтами:
![enter image description here](https://i.stack.imgur.com/gRJX8.png)
Я не получаю никаких исключений или трассировки стека нигде, ни на сетевой консоли, ни в своих журналах, хотя я установил для корневого регистратора отладку. (У меня длинный журнал , но мне ничего не объясняет.) Где или почему некоторые 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