#{resource} EL指定在哪里?

时间:2015-12-24 01:39:49

标签: jsf resources el specifications

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

<h:graphicImage value="#{resource['images:logo.gif']}"

EL如何定位图像? 也许规范定义了规则,但我不知道哪个规范。 我尝试在JSR-000344 JavaServer Faces 2.2JSR-000342 Java Platform, Enterprise Edition 7JSR-000341 Expression Language 3.0中找到它,但未找到。

1 个答案:

答案 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’]}”/>
     

这些条目呈现完全相同的标记。除了使用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和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是资源库名称的一个非常糟糕的例子。不要从规范示例中接过它。

另见: