根据JSF 2.0规范,有三种使用h:graphicImage的方式,这取决于JSF生成HTML标记的"src"属性的方式:
<h:graphicImage value="#{resource['images:next.gif']}"/>
<h:graphicImage library="images" name="next.gif"/>
<h:graphicImage url="/resources/images/next.gif"/>
规范规定前两个应该呈现完全相同的标记。在我的JSF实现(MyFaces 2.0.2)中,生成的输出HTML如下:
<img src="/AppName/faces/javax.faces.resource/next.gif?ln=images">
<img src="/AppName/faces/javax.faces.resource/next.gif?ln=images">
<img src="/AppName/resources/images/next.gif">
因此,如果我使用(name, library)或(value)属性,那么图像总是将由JSF的servlet流式传输到客户机。如果我使用(url)属性,我可以在没有servlet干预的情况下直接链接到资源。
对我来说,第二种方法-直接服务器URL到资源,更快。
在什么情况下使用第一种方法——指定(name, library)或(value)属性?
对我来说,第二种方法-直接服务器URL到资源,更快。
差异应该完全可以忽略不计。指向资源的"直接服务器URL";方法还使用servlet(由容器提供的default
servlet)。请显示你的基准测试结果。
在什么情况下使用第一种方法——指定(name, library)或(value)属性?
它允许您从JAR文件中提供资源。它还允许您以以下方式更好地动态切换库:
<h:graphicImage library="#{user.prefs.looknfeel}" name="next.gif"/>
library
实际上应该指向所有CSS/JS/图像的公共资源库,而不是指向特定的"images"图书馆。
相关问题:
- 如何引用JSF图像资源作为CSS背景图像url
- 将JSF前缀映射更改为后缀映射迫使我在CSS背景图像上重新应用映射