为什么某些对Primefaces <p:graphicimage>的HTTP请求返回0个字节,而另一些却起作用?

时间:2019-03-05 15:58:58

标签: tomcat jsf primefaces graphicimage

在PrimeFaces Web应用程序中,我通过使用{替换了以前的图像加载策略(该策略是将图像文件临时保存到Tomcat的webapps/目录中,并通过<img src="...">进行引用)。 {1}}。画廊的很多图像都被打印出来了in a loop with passing the ID。对于数量更多或更少的图像,有时会加载90%的图像(特别是如果我在返回<p:graphicImage>对象的getter方法中设置了一个断点),则仅加载一个图像。加载的图像和数量完全随机。

Image of gallery with some images loading, others not

由于加载了各种图像(并且它们都位于正确的位置),因此我认为我的基本编码不会太错误。该方法中的一些调试输出显示,返回StreamedContent的getter在第二阶段中完全针对渲染的图像调用。对于未渲染的图像,不会调用它。在Firefox的网络面板中,发送了相应的HTTP请求,并以0个字节返回:

enter image description here

尽管我将根记录器设置为调试,但无论在网络控制台还是在日志中,都没有任何异常或堆栈跟踪。 (我有一个很长的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

0 个答案:

没有答案