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

时间:2011-05-26 17:05:03

标签: jsf-2

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

<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 标签的人没有想过如何处理这个问题,所以我假设我错过了一些明显的东西。

2 个答案:

答案 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)

你可以使用:

<f:subview id="uniqueXXX">

另见this example