【问题标题】:Dynamic ID on composite component in JSFJSF 中复合组件的动态 ID
【发布时间】:2012-11-19 12:35:48
【问题描述】:

我在我的复合 JSF 组件中创建了一个链接:

<h:link id="menu-abc" outcome="/abc" value="ABC" />

链接不在表单中。但是,当我查看呈现的 HTML 代码时,有一个动态生成的 ID 作为我的 ID 的前缀:

<a id="j_idt33_menu-abg" name="j_idt33_abv" href="abc.xhtml">ABC</a>

我不知道这个动态 id 是从哪里来的。有什么想法吗?

ps:我们将分隔符从 : 更改为 _

【问题讨论】:

    标签: jsf jsf-2 composite-component


    【解决方案1】:

    这些症状表明您实际上根本没有自定义组件,而是一个复合组件,并且您已将 NamingContainer 分隔符从 : 更改为 _出于某种原因。

    复合组件本身是naming containers,并在其所有子组件的 ID 前面加上自己的 ID。原因很简单,因为它们可以在一个视图中多次重复使用。如果复合组件自己的 ID 未添加到前面,则会导致组件树中的 ID 重复。

    真正的自定义组件中,您可以完全控制客户端 ID。

    另见:

    【讨论】:

    • 谢谢。我将问题更改为复合组件。我终于发现我错过了关于复合组件使用的一个 Id。
    • 分隔符更改为_ 具有严重影响。 JSF 的自动生成的客户端 ID 本身也使用该字符。所以你绝对需要给你的所有组件(至少,那些你想在其他地方引用的组件,例如 h:message、f:ajax 等)提供一个没有该字符的固定 ID。否则UIComponent#findComponent() 可能会严重失败。这是一篇相关且可能具有启发性的阅读:stackoverflow.com/questions/10726653
    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2014-05-27
    • 2012-11-21
    • 2012-04-11
    • 2011-03-30
    相关资源
    最近更新 更多