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