我知道,它并没有多大区别,但在JSF 2中,我可以用两种方式之一输出资源(例如css):
a)使用标准的html <link>
组件和组件的绝对路径。这被视为文本,因此不会内置到组件中。
b)使用jsf <h:stylesheet>
并设置其名称和库。
现在,如果我正在编写主模板网站,那些不会改变(固定)的东西,我最好使用纯文本并给出资源的绝对路径吗?使用它和jsf组件之间的性能是否有任何变化,即使无关紧要?
JSF是否优化了对此的访问权限,以便每次呈现页面时都不必定位资源?
所有类型的资源,图片和JavaScript都是如此。
答案 0 :(得分:3)
优化实际上取决于所使用的JSF实现,但是,Mojarra和MyFaces都高度优化了资源处理的性能。已经计算了服务器端和客户端缓存的每种可能性。访问最多的资源缓存在服务器的内存中,I / O传输通过通道,设置了正确的ETag
和Last-Modified
响应头,等等。对于Mojarra来说,这是一个很好的起点。检查它是如何处理的是com.sun.faces.application.resource.ResourceHandlerImpl#handleResourceRequest()
方法。
答案 1 :(得分:1)
不是<h:stylesheet>
而是<h:outputStylesheet>
JSF组件在渲染时转换为纯HTML,因此当您看到页面的源代码时,您将找不到任何jsf组件,所有jsf组件都会根据html组件自动转换为。
此标记将转换为html,如下所示
<h:outputStylesheet library="css" name="style.css" />
HTML输出......
<link type="text/css" rel="stylesheet"
href="/JavaServerFaces/faces/javax.faces.resource/style.css?ln=css" />
警告
When render CSS file via <h:outputStylesheet /> tag, remember put the <h:head />
tag as well; Otherwise the css file will not render successful.
参考http://www.mkyong.com/jsf2/how-to-include-cascading-style-sheets-css-in-jsf/