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

时间:2011-08-28 09:45:29

标签: java javascript jsf-2 el

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

在我的Javascript文件中,我需要引用另一个资源文件(.swf文件,位于META-INF / resources中,如JSF所要求的那样)。我试图在我的javascript代码中放置一个#{resource['swf:file.swf']} EL表达式,但它不会得到解决。

对于exapmle,对于服务器中的以下JS文件:

var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");

浏览器获取:

var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");

这是错误的。

当我在CSS文件中放入相同的EL时,它会得到正确解析。对于服务器中的以下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属性的方法。因此,任何(工作)解决方案也会很乐意接受。

1 个答案:

答案 0 :(得分:0)

BalusC已经详细回答了类似的问题here。虽然第一个解决方案是最容易实现的,但我建议你选择第三个,我认为这是正确的方法。