虽然没有给出资源目录中的图像名称,但是在<p:graphicimage>事件上不必要地显示图像</p:graphicimage>

时间:2013-11-21 18:18:30

标签: image jsf primefaces jsf-2.2

我已在webroot\resources\fileUpload\product_image\thumb目录下存储了一些图像,以便这些图像可以显示在<p:graphicImage>上,如下所示。

<p:graphicImage library="fileUpload" 
                name="product_image/thumb/13850470212653732655006325945389_4921.jpg" 
                alt="Whatever the product name is."/>

如果没有给出图像名称13850470212653732655006325945389_4921.jpg,则不应显示图像,但会显示给定网址的图像。

<p:graphicImage library="fileUpload" 
                name="product_image/thumb/" 
                alt="Whatever the product name is."/>

网络浏览器上的图片网址如下所示。

/webroot/javax.faces.resource/product_image/thumb/.jsf?ln=fileUpload&v=13850470212653732655006325945389_4921

它如何拍摄图像?

1 个答案:

答案 0 :(得分:1)

如果资源文件名与\d+(_\d+)匹配,则将其识别为版本化资源。这是一个很少使用的功能(resource library versioning更常见)。具体来说,你可以有这样的结构:

WebContent
 |-- resources
 |    `-- js
 |         `-- script.js
 |              |-- 1_0.js
 |              |-- 1_1.js
 |              `-- 1_2.js
 :

(是的,script.js在这里文件夹名称)

当你宣布如下:

<h:outputScript name="js/script.js" />

然后自动按照以下生成的HTML输出提供最新的1_2.js,提供/context的上下文路径和*.xhtml的JSF映射:

<script type="text/javascript" src="/context/javax.faces.resource/scripts/script.js.xhtml?v=1_2"></script>

这一切都在JSF specification的第2.6.1.3节中指定。

然而,你有一个不幸的角落使用带有尾部斜杠的无扩展名文件夹作为资源名称,这应该是IMO失败的,但显然Mojarra也接受了。

如果您想避免此行为,则需要使用不同的模式作为文件名。例如。使用-代替_,或使用_作为前缀或后缀,或引入至少一个字母字符。