我有一个包含空格的文件名:bw3 - Copy_1340627264571.jpg
我使用此名称加载图像如下:
<h:graphicImage value="/#{myBean.imageFolder}/#{image.name}" width="30" height="30" style="border:0;"/>
这被翻译为:
<img width="30" height="30" style="border:0;" src="/MyAPP/image/bw3+-+Copy_1340627264571.jpg">
如果我尝试在outputText中打印名称,则会正确打印:
<h:outputText value="#{image.name}"/>
这被翻译为:
<span id="myForm:viewImagesTable:0:_t68">bw3 - Copy_1340627264571.jpg</span>
任何想法如何解决?
答案 0 :(得分:3)
这似乎是<h:graphicImage>
中的错误。请求URI中的空格应使用%20
以java.net.URI
进行网址编码,请求查询字符串中的空格应使用+
进行网址编码为java.net.URLEncoder
。似乎<h:graphicImage>
使用java.net.URLEncoder
对整个URI进行编码。
事先更好地替换它们:
<h:graphicImage value="/#{myBean.imageFolder}/#{image.name.replace(' ', '%20')}" />
或者,更好的是,根本不允许文件名中的空格。如果涉及上传的文件,请在保存之前将其替换为_
或其他内容。
请注意,这与您的问号标记所暗示的无有关。