【问题标题】:Generating unique ID tags in ui:include resource在 ui:include 资源中生成唯一 ID 标签
【发布时间】:2011-05-26 17:05:03
【问题描述】:

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

<ui:include id="foo" src="images/something.svg" />

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

我想做的是类似于 h:form 所做的事情,其中​​ 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:blinkbar:blink 的指针。我想我可以使用 XPath 表达式,但我知道那些有点慢。我无法想象发明 ui:include 标签的人没有考虑过如何处理这个问题,所以我假设我错过了一些明显的东西。

【问题讨论】:

  • 明确地说,something.svg 因此实际上是一个 Facelet 文件?
  • 不,它只是一个 svg 文档,以(在标题之后)一个 svg 标签开始。这在 HTML 5 中非常适用于将动态和交互式文档插入到页面中,而 JSF 在生成它时没有问题。问题是 Faces servlet 不处理除 UIComponents 中的 ID 标记之外的任何 ID 标记,并且 svg 文件中的任何内容都不是 JSF 定义的标记。
  • 但是你提到它在其中处理EL表达式?然后理论上可以引入 JSF 组件,甚至可以将其变成一个复合组件,它已经获得了自动生成的 ID。
  • Faces servlet 确实会在包含的 SVG 文件中找到并处理 EL 表达式。例如,您可以执行 并以这种方式生成唯一 ID。这种方法的问题在于它使 SVG 文件无法使用诸如 inkscape 之类的图形工具进行编辑。除此之外,Faces servlet 通过 SVG 文件中的所有内容而不进行解释,除非(我假设)它在它知道的名称空间中找到一个标记,例如 f:h: 或 ui:.
  • 好的,有道理。我发布了一个答案。

标签: jsf-2


【解决方案1】:

将其传递为&lt;ui:param&gt;

<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}来引用它。例如

<rect id="#{id}_blink" ... />

【讨论】:

  • 我喜欢。我不知道你可以这样使用 ui:param。这不是我理想的解决方案,因为我试图避免在 svg 源文件中放入会混淆像 Inkscape 这样的编辑器的东西。但是我刚刚尝试过,Inkscape 似乎并不介意在 ID 标签中使用 EL 表达式。因此,除非出现更好的情况,否则我将继续这样做。我担心我不得不写一个过滤器什么的。
  • 不客气。顺便说一句,感谢您分享您的经验,包括带有 EL 表达式的 SVG 文件,效果很好。我刚刚学到了一些新东西:)
【解决方案2】:

你可以使用:

&lt;f:subview id="uniqueXXX"&gt;

另见this example

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多