Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF中复合组件的动态ID_Jsf_Jsf 2_Composite Component - Fatal编程技术网

JSF中复合组件的动态ID

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:我们将分隔符从:改为症状表明

我在复合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:我们将分隔符从:改为

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

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

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

另见:
  • -这并不完全回答你的问题,但至少概括了具体的区别;您错误地将复合组件称为自定义组件

谢谢。我把问题改成复合成分。最后我发现我遗漏了复合组件用法的一个Id。分隔符改为
有严重的影响。JSF自动生成的客户机ID本身也使用该字符。因此,您绝对需要为所有组件(至少是您希望在其他地方引用的组件,例如h:message、f:ajax等)提供一个没有该字符的固定ID。否则,
UIComponent#findComponent()
可能会严重失败。以下是一段相关且可能具有启发性的阅读: