在PrimeFaces Web应用程序中,我通过使用{替换了以前的图像加载策略(该策略是将图像文件临时保存到Tomcat的webapps/
目录中,并通过<img src="...">
进行引用)。 {1}}。画廊的很多图像都被打印出来了in a loop with passing the ID。对于数量更多或更少的图像,有时会加载90%的图像(特别是如果我在返回<p:graphicImage>
对象的getter方法中设置了一个断点),则仅加载一个图像。加载的图像和数量完全随机。
由于加载了各种图像(并且它们都位于正确的位置),因此我认为我的基本编码不会太错误。该方法中的一些调试输出显示,返回StreamedContent
的getter在第二阶段中完全针对渲染的图像调用。对于未渲染的图像,不会调用它。在Firefox的网络面板中,发送了相应的HTTP请求,并以0个字节返回:
尽管我将根记录器设置为调试,但无论在网络控制台还是在日志中,都没有任何异常或堆栈跟踪。 (我有一个很长的log,但没有什么对我解释。)某些HTTP请求在何处或为什么未正确答复?
这是the JSP code生成的图库:
StreamedContent
这里是the Java:
<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>
但是,正如我说的那样,这段代码在部分时间内有效,因此我看不到自己在做什么错。 是否有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.Final
平台:Windows 10