我正在尝试从这样的资源中获取图片:
<img src="#{resource['img/bla.svg']}"/>
它正在这样工作...
但是现在我想对此文件进行泛化,因此它将来自这样的java类:
LogoHandler.getLogo(String type)
我试图像这样将它们放在一起:
<img src="#{resource["#{logoHandler.getLogo("A1")}"]}"/>
但是它当然不起作用,只是为了向您展示我想要达到的目标。
你能帮我吗?
答案 0 :(得分:4)
<img src="#{resource["#{logoHandler.getLogo("A1")}"]}"/>
EL确实不能那样工作。 #{...}
无法嵌套。 #{...}
实际上代表了一个范围,您可以让多个变量和表达式相互交互,从而产生一个结果。您应该删除内部的#{...}
并确保引号不冲突。
与HTML和JavaScript一样,EL也支持单引号。对于内部引号,可以使用单引号而不是双引号。
<img src="#{resource[logoHandler.getLogo('A1')]}"/>
否则,您必须转义双引号,这使表达式更难以阅读。
<img src="#{resource[logoHandler.getLogo(\"A1\")]}"/>
此外,为此,您还取决于所使用的EL实现。单斜杠转义仅在Oracle EL中有效,而在Apache EL中则需要两个。因此,您的代码将无法在使用不同EL实现的服务器之间移植。
<img src="#{resource[logoHandler.getLogo(\\"A1\\")]}"/>
一种完全不同的方法是使用JSF提供的<h:graphicImage>
组件。它生成一个HTML <img>
元素。其name
属性表示资源路径。这样,您就不再需要#{resource}
映射。
<h:graphicImage name="#{logoHandler.getLogo('A1')}"/>