JSF中复合组件的动态ID
我在复合JSF组件中创建了一个链接:JSF中复合组件的动态ID,jsf,jsf-2,composite-component,Jsf,Jsf 2,Composite Component,我在复合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:我们将分隔符从:改为症状表明
<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:我们将分隔符从:改为症状表明您实际上根本没有自定义组件,而是一个复合组件,并且出于某种原因,您已将
NamingContainer
分隔符从:
改为
复合组件本身是独立的,并在其所有子组件的ID前面加上自己的ID。原因很简单,因为它们可以在单个视图中多次重用。如果复合组件自己的ID未加前缀,则会导致组件树中出现重复的ID
在真正的自定义组件中,您可以完全控制客户端ID
另见:
- -这并不完全回答你的问题,但至少概括了具体的区别;您错误地将复合组件称为自定义组件
。
有严重的影响。JSF自动生成的客户机ID本身也使用该字符。因此,您绝对需要为所有组件(至少是您希望在其他地方引用的组件,例如h:message、f:ajax等)提供一个没有该字符的固定ID。否则,UIComponent#findComponent()
可能会严重失败。以下是一段相关且可能具有启发性的阅读: