Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 为什么对Primefaces执行一些HTTP请求<;p:graphicImage>;在其他人工作时返回0字节?_Tomcat_Jsf_Primefaces_Graphicimage - Fatal编程技术网

Tomcat 为什么对Primefaces执行一些HTTP请求<;p:graphicImage>;在其他人工作时返回0字节?

Tomcat 为什么对Primefaces执行一些HTTP请求<;p:graphicImage>;在其他人工作时返回0字节?,tomcat,jsf,primefaces,graphicimage,Tomcat,Jsf,Primefaces,Graphicimage,在PrimeFaces web应用程序中,我使用替换了以前的图像加载策略(该策略将图像文件临时保存到Tomcat的webapps/目录中,并通过引用它们,这很有效)。画廊的许多图片都被打印出来了。对于数量或多或少较大的图像,有时会加载90%的图像,有时(特别是如果我在getter方法中设置了一个断点,返回StreamedContent对象)只加载一个。加载哪些图像以及加载多少图像是完全随机的 由于各种图像确实加载(也在正确的位置),我认为我的基本编码不会太错误。该方法中的一些调试输出向我显示,

在PrimeFaces web应用程序中,我使用
替换了以前的图像加载策略(该策略将图像文件临时保存到Tomcat的
webapps/
目录中,并通过
引用它们,这很有效)。画廊的许多图片都被打印出来了。对于数量或多或少较大的图像,有时会加载90%的图像,有时(特别是如果我在getter方法中设置了一个断点,返回
StreamedContent
对象)只加载一个。加载哪些图像以及加载多少图像是完全随机的

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

我没有在任何地方得到任何异常或堆栈跟踪,无论是在网络控制台上还是在日志中,尽管我将根记录器设置为debug。(我得到了一个很长的答案,但没有什么可以解释。)一些HTTP请求在哪里或为什么没有得到正确响应?

这是生成库的原因:

<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>
但是,正如我所说,这段代码部分时间是有效的,所以我不知道我做错了什么对我需要增加的请求有限制吗?因为如果设置断点,我只加载一个图像,这看起来像是一个时间问题。(也没有太多线程在该断点处停止,这是我所期望的,但只有一个。)

软件版本:
Java 8.114
Tomcat:8.0.52
MySQL:5.7.19
弹性搜索:5.6.1
全方位:2.6.3
SpringFaces:2.4.5.发布
MyFaces:2.2.12
PrimeFaces:6.2
PrimeFaces扩展:6.1.1
休眠:5.3.7.最终版本

平台:Windows 10

有多少图像?我认为渲染器中有200个限制。内容类型也不同(根据浏览器…)html和jpeg。从4张图片开始,然后增加,看看你是否到达了一个1停止工作的树丛。。。调试浏览器网络流量等。。。动态资源条目。如果这是您的问题,那么没有什么可以阻止您尝试
session.put(Constants.DYNAMIC_RESOURCES_MAPPING,new LimitedSizeHashMap(1024))在会话创建时。不确定将其设置为非常高的tbh是否是一个好主意。您最好将分页或无限滚动添加到您的图库中。
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();
}