错误的JSF 2 ID链接

FeH*_*eHe 10 jsf-2

情况

JavaServer Faces版本:2.1.6

我有一个带有两个嵌套cc的父复合组件.其中一个包含HtmlPanelGroup,它具有组件绑定.我使用该绑定以编程方式将HtmlCommandLink-Objects添加到HtmlPanelGroup.

我们打电话给一些ID:

  • 父母cc的父母
  • CHILD_FIRST为第一个孩子cc,嵌套在PARENT中
  • CHILD_SECOND为第二个孩子cc,嵌套在PARENT中
  • PanelGroup的GROUP,嵌套在CHILD_SECOND中
  • 第一个HtmlCommandLink-Object的LINK_1,以编程方式添加到GROUP

期望

我希望以下ID链接(默认为javax.faces.SEPARATOR_CHAR):

PARENT (Composite Component, declarative)
  PARENT:CHILD_FIRST (Composite Component, declarative)
  PARENT:CHILD_SECOND (Component Component, declarative)
    PARENT:CHILD_SECOND:GROUP (HtmlPanelGroup, declarative)
      PARENT:CHILD_SECOND:GROUP:LINK_1 (HtmlCommandLink, programmatically)
Run Code Online (Sandbox Code Playgroud)

问题

第一页访问时,HtmlCommandLink-Object的ID错误.而不是"PARENT:CHILD_SECOND:GROUP:LINK_1",ID仅为"CHILD_SECOND:GROUP:LINK_1".刷新页面后,ID正确"PARENT:CHILD_SECOND:GROUP:LINK_1".实际上,第二个复合组件中的每个组件("CHILD_SECOND")都缺少ID的第一部分("PARENT").刷新后所有ID都正确.

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

che*_*ero -2

浏览器解释后的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>
Run Code Online (Sandbox Code Playgroud)

那么标签的 id 将不是 form:panel:panel1:lab 而是 form:panel:lab。如果你想获取id的widget更深,那我也说不出来,但不会超过3层。我可以告诉你如何找到 id。你可以只写页面,然后在chrome或firefox上查看它,你可以在解释后看到源代码。这样你就可以得到你想要的id。

祝你好运!

  • 为什么这个答案会被投票?“据我所知,不超过 3 级”* 的说法纯粹是无稽之谈。相关学习资料:http://stackoverflow.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-identifier/8644762#8644762 注意`&lt;p: panel&gt;` 不是 ** 一个 `NamingContainer`。因此,您关于“:panel”将出现在“&lt;h:label&gt;”的客户端 ID 中的说法纯粹是无稽之谈。 (2认同)