【问题标题】:Where is #{resource} EL specified?#{resource} EL 在哪里指定?
【发布时间】:2015-12-24 01:39:48
【问题描述】:
【问题讨论】:
标签:
jsf
resources
el
specifications
【解决方案1】:
在JSF 2.0 specification中,第2.6.2章第一次提到:
2.6.2 渲染资源
图像、样式表和脚本等资源使用第 2.6.1 节中概述的资源处理机制
“打包资源”。所以,例如:
<h:graphicImage name=”Planets.gif” library=”images”/>
<h:graphicImage value=”#{resource[‘images:Planets.gif’]}”/>
这些条目呈现完全相同的标记。除了使用name 和library 属性,样式表和
脚本资源可以“重新定位”到视图的其他部分。例如,我们可以指定一个脚本资源是
在页面中的 HTML“head”、“body”或“form”元素中呈现。
然后在第 5.6.2.5 章:
5.6.2.5 资源 ELResolver
此解析器是一种将Resource 实例编码到面孔请求中的方法,以便后续面孔
来自浏览器的资源请求可以使用第 2.6 节“资源”中所述的 ResourceHandler 来满足
处理”.
ELResolver方法实现要求
如果 base 和 property 不为 null,并且 base 是
ResourceHandler 的实例(情况将如此)
使用 #{resource[‘ajax.js’]} 等表达式,
执行以下操作。 (注:这是可能的,因为
到ImplicitObjectELResolver 返回
ResourceHandler,参见第 5.6.2.1 节“隐式
面向 Facelets 和 Programmatic 的对象 ELResolver
访问”)
- 如果属性不包含冒号
字符‘:’,将属性视为
resourceName 并将属性传递给
ResourceHandler.createResource(resourceName)。
- 如果属性包含一个冒号
字符‘:’,将‘:’之前的内容视为
libraryName 和‘:’后面的内容
作为resourceName 并将两者都传递给
ResourceHandler.createResource(resourceName, libraryName)
- 如果属性包含多个冒号
字符‘:’,抛出一个本地化的
ELException,包括财产。
如果上述步骤之一导致创建
非空Resource 实例,调用
ELContext.setPropertyResolved(true) 并返回
调用getRequestPath() 方法的结果
Resource 实例。
在 JSF 2.1 和 2.2 规范的相同章节中也提到过。
与具体问题无关,images 是一个非常糟糕的资源库名称示例。不要从规范示例中接管它。
另见: