#{resource} EL指定在哪里?

Ool*_*ong 1 resources jsf specifications el

在JSF页面中,我使用EL来查找放在/resource/images/文件夹中的图像.

<h:graphicImage value="#{resource['images:logo.gif']}"
Run Code Online (Sandbox Code Playgroud)

EL如何定位图像?也许规范定义了规则,但我不知道哪个规范.我尝试在JSR-000344 JavaServer Faces 2.2,JSR-000342 Java平台,企业版7,JSR-000341表达式语言3.0中找到它,但没找到.

Bal*_*usC 5

JSF 2.0规范中,它在第2.6.2章中首次提到:

2.6.2渲染资源

图像,样式表和脚本等资源使用第2.6.1节"打包资源"中概述的资源处理机制.所以,例如:

<h:graphicImage name=”Planets.gif” library=”images”/>
<h:graphicImage value=”#{resource[‘images:Planets.gif’]}”/>
Run Code Online (Sandbox Code Playgroud)

这些条目呈现完全相同的标记.除了使用namelibrary属性之外,样式表和脚本资源可以"重定位"到视图的其他部分.例如,我们可以指定在页面中的HTML"head","body"或"form"元素内呈现脚本资源.

然后在第5.6.2.5章:

5.6.2.5资源ELResolver

此解析器是一种将Resource实例编码为面部请求的方法,以便使用ResourceHandler满足来自浏览器的后续面部资源请求,如第2.6节"资源处理"中所述.

ELResolver方法实现要求

如果base和property不为null,并且base是一个实例ResourceHandler(如表达式的情况那样#{resource[‘ajax.js’]},请执行以下操作.(注意:由于ImplicitObjectELResolver返回ResourceHandler,这是可能的 ,请参见第5.6.2.1节"隐式对象用于Facelets和程序访问的ELResolver")

  • 如果property不包含冒号字符':',则将property作为 resourceName和传递属性 ResourceHandler.createResource(resourceName).
  • 如果属性包含单个冒号字符':',则将':'之前的内容视为' libraryName和'之后的内容resourceName,并将两者都传递给 ResourceHandler.createResource(resourceName, libraryName)
  • 如果property包含多个冒号字符':',则抛出一个本地化的 ELException包含属性.

如果上述步骤之一导致创建非null Resource实例,则调用ELContext.setPropertyResolved(true)并返回在实例 上调用getRequestPath()方法的结果Resource.

在JSF 2.1和2.2规范的相同章节中也提到了它.

具体问题无关,images是资源库名称的一个非常糟糕的例子.不要从规范示例中接管它.

也可以看看: