如何在JSF 2.0中呈现图像

Iri*_*ina 12 jsf image jsf-2

根据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"/>
Run Code Online (Sandbox Code Playgroud)

规范声明前两个应该呈现完全相同的标记.在我的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">
Run Code Online (Sandbox Code Playgroud)

所以,如果我使用(名称,库)或(值)属性,那么图像总是会被JSF的servlet流式传输到客户端.如果我使用(url)属性,我可以直接链接到没有servlet干预的资源.

对我来说,第二种方法 - 直接服务器URL到资源,更快.

在什么情况下使用第一种方法 - 指定(名称,库)或(值)属性?

Bal*_*usC 8

对我来说,第二种方法 - 直接服务器URL到资源,更快.

差异应该完全可以忽略不计."直接服务器URL到资源"方法也使用servlet(default容器提供的servlet).请显示您的基准测试结果.


在什么情况下使用第一种方法 - 指定(名称,库)或(值)属性?

它允许您从JAR文件中提供资源.它还允许您以下列方式更好地动态切换库:

<h:graphicImage library="#{user.prefs.looknfeel}" name="next.gif"/>
Run Code Online (Sandbox Code Playgroud)

library实际上应该指向所有的CSS/JS /图像,而不是一个具体的"图像"图书馆的公用资源库.

相关问题: