PrimeFaces 11.0.0中<p:galleria>报JSF1064资源无法找到错误
故障原因
- 属性使用错误:
<p:graphicImage>的name属性仅用于加载JSF标准资源库(即webapp/resources目录下注册的静态资源),无法直接识别web根目录下的自定义静态路径。你将存放在web根目录/recursos/路径下的图片传给name属性,JSF会按照资源库规则寻址,必然找不到文件。 - 路径格式不统一:从服务端日志可以看到,缩略图路径带开头斜杠
/recursos/...,主图路径部分缺失开头斜杠recursos/...,进一步导致路径解析失败。
修复方案
两种方案二选一即可:
方案1:保留现有文件位置(改动最小)
不需要移动图片文件,只调整页面代码和路径格式:
- 移除
<p:graphicImage>原来的name属性,改用value属性 - 路径前拼接请求上下文路径,避免项目部署上下文变化导致寻址错误
修正后的XHTML代码片段:
<p:galleria value="#{galleriaView.photos}" var="photo" numVisible="5" responsiveOptions="#{galleriaView.responsiveOptions1}" circular="true" autoPlay="true" transitionInterval="2000" style="max-width: 640px"> <p:graphicImage value="#{request.contextPath}#{photo.itemImageSrc}" alt="#{photo.alt}" style="width: 100%; display: block;" /> <f:facet name="thumbnail"> <p:graphicImage value="#{request.contextPath}#{photo.thumbnailImageSrc}" alt="#{photo.alt}" style="display: block;" /> </f:facet> </p:galleria>
- 统一
PhotoService.java中所有图片路径格式,全部保留开头斜杠,修正部分路径缺失斜杠的问题。
方案2:使用JSF标准资源库加载
如果要继续使用name属性,按JSF资源规则调整文件位置和路径:
- 将整个
recursos/imagenes文件夹移动到webapp/resources目录下,最终文件路径为webapp/resources/imagenes/banner/ - 修改
PhotoService.java中所有图片路径,去掉开头的/recursos/前缀,示例:
photos.add(new Photo("imagenes/banner/banner1.jpg", "imagenes/banner/banner1s.jpg", "Mi burrito Sabanero1", "banner 1"));
- XHTML中原有
name属性的写法不需要改动,JSF资源处理器会自动定位到resources目录下的对应文件。
前置校验
修复前先确认静态文件本身可访问:部署应用后直接在浏览器访问单张图片地址(格式为http://你的域名:端口/项目上下文路径/recursos/imagenes/banner/banner1.jpg),如果直接访问都无法打开,需要先检查文件是否被正确打包到部署目录、文件名大小写是否和代码中完全匹配。
内容的提问来源于stack exchange,提问作者Alfredo Jose Acosta Reyes
相关产品推荐
相关产品推荐

