在由 @ResourceDependency 加载的 Javascript 文件中获取 EL
Posted
技术标签:
【中文标题】在由 @ResourceDependency 加载的 Javascript 文件中获取 EL【英文标题】:Getting an EL in a Javascript file, loaded by @ResourceDependency 【发布时间】:2011-11-05 10:00:24 【问题描述】:我在 JSF 组件中使用 @ResourceDependency
注释将 javascript 和 CSS 文件添加到我的 JSF 页面中。
在我的 Javascript 文件中,我需要引用另一个资源文件(一个 .swf 文件,它位于 META-INF/resources 中,根据 JSF 的要求)。我试图在我的 javascript 代码中放置一个 #resource['swf:file.swf']
EL 表达式,但它不会得到解决。
例如,对于服务器中的以下JS文件:
var instance = new JSClass();
instance.setResourceUrl("#resource['swf:file.swf']");
浏览器获取:
var instance = new JSClass();
instance.setResourceUrl("#resource['swf:file.swf']");
这是错误的。
当我将相同的 EL 放入 CSS 文件时,它得到了正确的解析。对于服务器中的以下 CSS 文件:
.instance-css-class
background: url("#resource['swf:file.swf']")
浏览器获取:
.instance-css-class
background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf")
这正是我需要的,但在 JS 文件中。
显然,我可以使用 CSS 作为解决问题的方法(创建一个 DOM 元素,将 CSS 类附加到它,然后读取并解析所需的样式属性)。但是,有没有更优雅的方式来实现它?这是 JSF 库中的错误(我使用的是 Mojarra 2.0.3,与 Jboss 6.1),还是有这种行为的原因?
请注意,上面的代码是标签库的一部分,因此不能使用those 等变通方法。
编辑 - 似乎 CSS 解决方法不可行,因为我看不到从 CSS 文件中获取 CSS 属性的方法。因此,任何(可行的)解决方法都将被欣然接受。
【问题讨论】:
我最近刚刚发现,令我惊讶的是,EL 是在 CSS 中评估的。 Mojarra 实现使用 ResourceHelper,它能够解析 Faces 资源请求所请求的资源中的 EL 表达式。这就是为什么我想知道 EL 没有在 JS 文件中评估,因为它是相同类型的请求。如果有人能对此有所了解,那就太好了。 【参考方案1】:BalusC 已经详细回答了类似的问题here。虽然第一个解决方案是最容易实现的,但我建议您使用第三个,我认为这是正确的方法。
【讨论】:
以上是关于在由 @ResourceDependency 加载的 Javascript 文件中获取 EL的主要内容,如果未能解决你的问题,请参考以下文章