Jsf 2 错误的JSF2ID链接

Jsf 2 错误的JSF2ID链接,jsf-2,Jsf 2,形势 JavaServerFaces版本:2.1.6 我得到了一个包含两个嵌套cc的父复合组件。其中一个包含一个HtmlPanelGroup,它有一个组件绑定。我使用该绑定以编程方式将HtmlCommandLink对象添加到HtmlPanelGroup 让我们调用一些ID: 父cc的父级 第一个子cc的CHILD_FIRST,嵌套在PARENT中 第二个子cc的子\u秒,嵌套在父项中 PanelGroup的组,嵌套在CHILD_SECOND中 第一个HtmlCommandLink对象的链接\u

形势

JavaServerFaces版本:2.1.6

我得到了一个包含两个嵌套cc的父复合组件。其中一个包含一个HtmlPanelGroup,它有一个组件绑定。我使用该绑定以编程方式将HtmlCommandLink对象添加到HtmlPanelGroup

让我们调用一些ID:

  • 父cc的父级
  • 第一个子cc的CHILD_FIRST,嵌套在PARENT中
  • 第二个子cc的子\u秒,嵌套在父项中
  • PanelGroup的组,嵌套在CHILD_SECOND中
  • 第一个HtmlCommandLink对象的链接\u 1,以编程方式添加到组
期望值

我期望以下ID链接(使用默认的javax.faces.SEPARATOR\u CHAR):

问题

在第一次访问页面时,HtmlCommandLink对象的ID错误。ID不是“父级:子级:组:链接\u 1”,而是“子级:组:链接\u 1”。刷新页面后,ID正确为“父:子\秒:组:链接\ 1”。事实上,第二个复合组件(“CHILD_second”)中的每个组件都缺少ID的第一部分(“PARENT”)。刷新后,所有ID都正确显示

解决方案


我可能会在第一次访问后自动刷新页面。但是我不想这样。

浏览器解释后的id不符合您的想法。据我所知,它不超过3级。例如:

 <h:form id="form">
    <h:panel id="panel">
        <h:panel id="panel1">
            <h:label id="lab"/>
        </h:panel>
        <h:panel id="panel2">
        </h:panel>    
    </h:panel>
</h:form>

那么标签的id将不是form:panel:panel1:lab,而是form:panel:lab。如果您想要获取id的小部件更深,那么我说不出来,但它不会超过3个级别。我可以告诉你怎么找到身份证。 您只需编写页面,然后在chrome或firefox上查看,在那里您可以在解释后看到源代码。这样你就可以得到你想要的身份证


祝你好运

我发现很难理解具体的问题,因为
HtmlPanelGroup
不是
NamingContainer
组件,因此不应该将其ID预先添加到命令链接子级。您不应该在命令链接子项的ID中看到
组:
。一个真正的SSCCE将大大有助于更好地理解具体问题。究竟为什么这个问题有10票赞成?该问题目前的形式没有有效的SSCCE,没有任何意义,因此不可回答。太糟糕了,我不能重新投一个过期的接近票。@Bluasc我想你是对的,这很难确定实际的PanelGroup是否包含该组件。到底为什么这个答案被投了赞成票?“据我所知不超过3级”的说法纯属无稽之谈。相关学习材料:请注意,
不是
NamingContainer
。因此,您所说的
:panel
将出现在
的客户机ID中是另一种纯粹的胡说八道。
 <h:form id="form">
    <h:panel id="panel">
        <h:panel id="panel1">
            <h:label id="lab"/>
        </h:panel>
        <h:panel id="panel2">
        </h:panel>    
    </h:panel>
</h:form>