在ui:include资源中生成唯一ID标记

Ala*_*ect 5 jsf-2

我正在构建一个页面,其中包含多个标记实例,如下所示.

<ui:include id="foo" src="images/something.svg" />
Run Code Online (Sandbox Code Playgroud)

Faces Servlet将svg文件传递给浏览器,除了找到的EL表达式之外没有任何处理,这很好.问题是包含文件中的id标签是静态的,因此该文件的多个包含将生成非唯一ID标签.

我想要做的是像h:form那样,其中ui:include标签的ID被添加到包含文件中元素的ID之前.然后我可以毫不含糊地解决所有问题.

这样做是否有一种被接受的"最佳实践"方式?

更新:也许我应该通过跟进来增加这个问题,我首先需要这样做吗?我的目标是唯一地处理svg文档的每个包含副本中的标记,其中可以有任何数字.我有jQuery可用,因为无论如何它被Primefaces拉入.

所以,如果我有这样的JSF文件:

<ui:include id="foo" src="images/something.svg" />
<ui:include id="bar" src="images/something.svg" />
Run Code Online (Sandbox Code Playgroud)

在something.svg文件中我有一个标签

<rect id="blink" ... />
Run Code Online (Sandbox Code Playgroud)

在页面上的javascript中,我希望能够获得指向foo的指针:blinkbar:blink.我想我可以使用XPath表达式,但我知道那些有点慢.我无法想象那些发明了ui:include标签的人没有想过如何处理这个问题所以我假设我错过了一些明显的东西.

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

#{id}您可以通过包含文件的 EL 中的参数名称来引用它。例如

<rect id="#{id}_blink" ... />
Run Code Online (Sandbox Code Playgroud)