获取由@ResourceDependency加载的Javascript文件中的EL

获取由@ResourceDependency加载的Javascript文件中的EL,java,javascript,jsf-2,el,Java,Javascript,Jsf 2,El,我在JSF组件中使用@ResourceDependency注释将Javascript和CSS文件添加到我的JSF页面中 在我的Javascript文件中,我需要引用另一个资源文件(一个.swf文件,根据JSF的要求,它位于META-INF/resources中)。我试图在我的javascript代码中放入一个#{resource['swf:file.swf']}EL表达式,但无法解析 例如,对于服务器中的以下JS文件: var instance = new JSClass(); instance

我在JSF组件中使用
@ResourceDependency
注释将Javascript和CSS文件添加到我的JSF页面中

在我的Javascript文件中,我需要引用另一个资源文件(一个.swf文件,根据JSF的要求,它位于META-INF/resources中)。我试图在我的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']}");
.instance-css-class {
  background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf")
}
这是错误的

当我在CSS文件中放入相同的EL时,它得到了正确的解析。对于服务器中的以下CSS文件:

.instance-css-class {
  background: url("#{resource['swf:file.swf']}")
}
浏览器将获取:

var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");
.instance-css-class {
  background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf")
}
这正是我需要的,但是在JS文件中

显然,我可以使用CSS作为解决问题的方法(创建一个DOM元素,将CSS类附加到它,然后读取和解析所需的样式属性)。但是,有没有更优雅的方式来实现它呢?这是JSF库中的一个bug(我使用的是Mojarra 2.0.3和Jboss 6.1),还是这种行为的原因

请注意,上面的代码是标记库的一部分,因此不能使用类似的变通方法



编辑-似乎CSS解决方案不可行,因为我看不到从CSS文件获取CSS属性的方法。因此,任何(工作)解决方案都会被欣然接受。

巴卢斯克详细回答了一个类似的问题。虽然第一种解决方案最容易实现,但我建议您使用第三种解决方案,我认为这是正确的方法。

我最近才发现,令人惊讶的是,EL是用CSS计算的。Mojarra实现使用ResourceHelper,该ResourceHelper能够解析Faces资源请求请求的资源中的EL表达式。这就是为什么我想知道EL没有在JS文件中计算,因为它是相同类型的请求。如果有人能解释一下,那就太好了。