我正在构建一个包含多个标记实例的页面,如下所示。
<ui:include id="foo" src="images/something.svg" />
Faces Servlet将svg文件传递给浏览器,除了找到的EL表达式之外没有任何处理,这很好。问题是包含文件中的id标签是静态的,因此该文件的多个包含将生成非唯一ID标签。
我想要做的事情就像 h:form 那样,其中 ui:include 标记的ID被添加到了 ui:include 标记的ID中。包含文件。然后我可以毫不含糊地解决所有问题。
是否有一种可接受的“最佳实践”方式?
更新:也许我应该通过跟进来补充这个问题,我首先需要这样做吗?我的目标是唯一地处理svg文档的每个包含副本中的标记,其中可以有任何数字。我有jQuery可用,因为无论如何它被Primefaces引入。
所以如果我有这样的JSF文件:
<ui:include id="foo" src="images/something.svg" />
<ui:include id="bar" src="images/something.svg" />
在something.svg文件中我有一个标签
<rect id="blink" ... />
在页面上的javascript中,我希望能够获得指向 foo:blink 或 bar:blink 的指针。我想我可以使用XPath表达式,但我知道那些有点慢。我无法想象发明 ui:include 标签的人没有想过如何处理这个问题,所以我假设我错过了一些明显的东西。
答案 0 :(得分:3)
将其传递为<ui:param>
。
<ui:include src="images/something.svg">
<ui:param name="id" value="foo" />
</ui:include>
<ui:include src="images/something.svg">
<ui:param name="id" value="bar" />
</ui:include>
您可以通过所包含文件的EL中的参数名称#{id}
来引用它。 E.g。
<rect id="#{id}_blink" ... />
答案 1 :(得分:0)