1

我的标记中有以下音频标签:

<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 现在似乎是文件名的子级。我如何逃避这个点?

4

2 回答 2

3

参数化它使用<ui:param>.

<ui:param name="resourceIdentifier" value="sounds:#{cc.attrs.filename}.mp3" />
<source src="#{resource[resourceIdentifier]}" type="audio/mpeg" />
于 2012-07-13T02:51:35.983 回答
2

您想要使用的是 Facelets 的串联功能。

或者按照这里的描述创建一个,或者在你的项目中设置OmniFaces,这样你就可以使用它漂亮的字符串操作函数,像这样:

<source src="#{resource[of:concat('sounds:', cc.attrs.filename)]}"
    type="audio/mpeg" />
于 2012-07-12T22:05:21.237 回答