我的标记中有以下音频标记:
<audio id="audio" preload="auto" hidden="true">
<source src="#{resource['sounds:filename.mp3']}" type="audio/mpeg" />
<source src="#{resource['sounds:filename.ogg']}" type="audio/ogg" />
<embed src="#{resource['sounds:filename.mp3']}" hidden="true"/>
</audio>
我想将它包装在一个自定义复合组件中,该组件将文件名作为属性。
<source src="#{resource['sounds:cc.attrs.filename.mp3']}" type="audio/mpeg" />
这显然不起作用,因为.mp3现在似乎是文件名的孩子。 我如何逃离点?
答案 0 :(得分:3)
使用<ui:param>
对其进行参数化。
<ui:param name="resourceIdentifier" value="sounds:#{cc.attrs.filename}.mp3" />
<source src="#{resource[resourceIdentifier]}" type="audio/mpeg" />
答案 1 :(得分:2)
您想要使用的是Facelets的连接函数。
您的项目中create one as described here或设置OmniFaces,因此您可以使用其优秀的String manipulation functions,如下所示:
<source src="#{resource[of:concat('sounds:', cc.attrs.filename)]}"
type="audio/mpeg" />