错误的JSF 2 ID链接

时间:2013-04-17 08:34:33

标签: 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
  • LINK_1代表第一个HtmlCommandLink-Object,以编程方式添加到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)

问题

第一页访问时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都正确。

解决方案

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

1 个答案:

答案 0 :(得分:-1)

浏览器解释后的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将不是形式:panel:panel1:lab but form:panel:lab。如果你想获得id的小部件更深,那么我不知道但它不会超过3个级别。我可以告诉你如何找到身份证。  您可以只编写页面,然后在chrome或firefox上查看它,您可以在解释后看到源代码。所以你可以得到你想要的id。

祝你好运!