在JSF页面中,我使用EL来查找放在/resource/images/
文件夹中的图像。
<h:graphicImage value="#{resource['images:logo.gif']}"
EL如何定位图像? 也许规范定义了规则,但我不知道哪个规范。 我尝试在JSR-000344 JavaServer Faces 2.2,JSR-000342 Java Platform, Enterprise Edition 7,JSR-000341 Expression Language 3.0中找到它,但未找到。
答案 0 :(得分:5)
在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
个实例编码为面部请求以便后续面部的方法 可以使用ResourceHandler来满足浏览器的资源请求,如第2.6节“资源”中所述 处理”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
,包括财产。如果上述步骤之一导致创建 一个非null
Resource
实例,调用ELContext.setPropertyResolved(true)
并返回 调用getRequestPath()
方法的结果Resource
实例。
在JSF 2.1和2.2规范的相同章节中也提到了它。
对具体问题 无关,images
是资源库名称的一个非常糟糕的例子。不要从规范示例中接过它。