代码之家  ›  专栏  ›  技术社区  ›  mgamer

Jsf如何创建命名容器

  •  7
  • mgamer  · 技术社区  · 16 年前

    in this post

    2 回复  |  直到 9 年前
        1
  •  12
  •   BalusC    16 年前

    我发现两者都不是 <ui:composition> <ui:component> 实际上是一个命名容器,因此在同一窗体中多次使用同一组件将失败,并出现重复ID异常。这似乎是一个糟糕的设计,因为组件的全部要点是可重用性。为了解决这个问题,我加入了一个 <f:subview>

    myComponent.xhtml:

    <ui:component>      
        <f:subview id="#{id}">
            ....component code
        </f:subview>
    </ui:component>
    

    在其他页面上使用它很简单(在正确设置taglib.xml和web.xml之后):

    <myTagLib:myComponent id="myCompA" />
    
        2
  •  4
  •   Community Mohan Dere    6 年前

    我建议退一步调查一下 为什么? UINamingContainer 组件。

    出现重复ID错误的可能原因有几个,这些可能有助于您进一步确定错误:

    • 相同的 ID用于 不同的 UIComponent 他在房间里 相同的 UINAMING容器 组件。
    • 组件绑定到 相同的 UI组件 财产 相同的 豆子。
    • 仅限JSP: f:subview 已在 起源 页面而不是 第页。
    • 这个 相同的 包括页面 内部时间 相同的 UINAMING容器
    • 组件是动态构建的(例如。 new UIComponent() ) 没有 分配了一个ID的。

    在这里, UINamingContainer 在每个 <h:form> <h:dataTable> <f:subview> .

    没有 所有不相关的代码(如不相关的组件、库、HTML/CSS/JS/etc),只要复制、粘贴、运行它而不做任何更改,就可以重现完全相同的问题。

    推荐文章