h:graphicImage值标记将空格解析为+

时间:2012-06-25 12:45:17

标签: jsf-2 el

我有一个包含空格的文件名: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>

任何想法如何解决?

1 个答案:

答案 0 :(得分:3)

这似乎是<h:graphicImage>中的错误。请求URI中的空格应使用%20java.net.URI进行网址编码,请求查询字符串中的空格应使用+进行网址编码为java.net.URLEncoder。似乎<h:graphicImage>使用java.net.URLEncoder对整个URI进行编码。

事先更好地替换它们:

<h:graphicImage value="/#{myBean.imageFolder}/#{image.name.replace(' ', '%20')}" />

或者,更好的是,根本不允许文件名中的空格。如果涉及上传的文件,请在保存之前将其替换为_或其他内容。

请注意,这与您的问号标记所暗示的有关。