在由 @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的主要内容,如果未能解决你的问题,请参考以下文章

如何在由'^ P'分隔符分隔的数据上构建一个hive表

PHP 中的 OAuth 扩展加载

类加载的三种方式比较

资料-Java基础:类加载方式及差异

对象未找到但在由“新”创建时工作

为啥输入在由 React 生成时不起作用