有没有办法在 EL 中的 #{resource} 映射中获取 JSF bean 属性
Is there a way to get JSF bean property inside #{resource} mapping in EL
我正在尝试从这样的资源中获取图像:
<img src="#{resource['img/bla.svg']}"/>
它是这样工作的...
但现在我想概括这个文件,所以它将来自 java class 这样的:
LogoHandler.getLogo(String type)
我试着像这样把它们放在一起:
<img src="#{resource["#{logoHandler.getLogo("A1")}"]}"/>
但当然它不起作用,只是为了向您展示我想要实现的目标。
你能帮帮我吗?
<img src="#{resource["#{logoHandler.getLogo("A1")}"]}"/>
EL 确实不是那样工作的。 #{...}
不能嵌套。 #{...}
实际上代表一个范围,您可以让多个变量和表达式相互交互,产生一个结果。您应该删除内部 #{...}
并确保引号不冲突。
与HTML和JavaScript一样,EL也支持单引号。您可以对内引号使用单引号而不是双引号。
<img src="#{resource[logoHandler.getLogo('A1')]}"/>
否则您必须转义双引号,这会使表达式更难阅读。
<img src="#{resource[logoHandler.getLogo(\"A1\")]}"/>
此外,您为此还取决于所使用的 EL 实现。 single-slash 转义仅适用于 Oracle EL,而在 Apache EL 中您需要两个。因此,您的代码将无法跨使用不同 EL 实现的服务器移植。
<img src="#{resource[logoHandler.getLogo(\"A1\")]}"/>
一种完全不同的方法是使用 JSF-provided <h:graphicImage>
组件。它生成一个 HTML <img>
元素。它的 name
属性表示资源路径。这样您就不再需要 #{resource}
映射。
<h:graphicImage name="#{logoHandler.getLogo('A1')}"/>
另请参阅:
- How to reference CSS / JS / image resource in Facelets template?
我正在尝试从这样的资源中获取图像:
<img src="#{resource['img/bla.svg']}"/>
它是这样工作的...
但现在我想概括这个文件,所以它将来自 java class 这样的:
LogoHandler.getLogo(String type)
我试着像这样把它们放在一起:
<img src="#{resource["#{logoHandler.getLogo("A1")}"]}"/>
但当然它不起作用,只是为了向您展示我想要实现的目标。
你能帮帮我吗?
<img src="#{resource["#{logoHandler.getLogo("A1")}"]}"/>
EL 确实不是那样工作的。 #{...}
不能嵌套。 #{...}
实际上代表一个范围,您可以让多个变量和表达式相互交互,产生一个结果。您应该删除内部 #{...}
并确保引号不冲突。
与HTML和JavaScript一样,EL也支持单引号。您可以对内引号使用单引号而不是双引号。
<img src="#{resource[logoHandler.getLogo('A1')]}"/>
否则您必须转义双引号,这会使表达式更难阅读。
<img src="#{resource[logoHandler.getLogo(\"A1\")]}"/>
此外,您为此还取决于所使用的 EL 实现。 single-slash 转义仅适用于 Oracle EL,而在 Apache EL 中您需要两个。因此,您的代码将无法跨使用不同 EL 实现的服务器移植。
<img src="#{resource[logoHandler.getLogo(\"A1\")]}"/>
一种完全不同的方法是使用 JSF-provided <h:graphicImage>
组件。它生成一个 HTML <img>
元素。它的 name
属性表示资源路径。这样您就不再需要 #{resource}
映射。
<h:graphicImage name="#{logoHandler.getLogo('A1')}"/>
另请参阅:
- How to reference CSS / JS / image resource in Facelets template?