在视图中找到重复的组件ID

时间:2013-12-12 12:05:15

标签: java jsf primefaces

我收到一个错误,例如已在树表列标记中的视图中找到组件ID组件,其中包含id = col1 。我有两个Managed Beans用于这个单一的xhtml文件,两者都是会话范围的。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
    <title>Category and Brand Manage Page</title>
</h:head>
<h:body>
    <ui:composition template="/templates/layout.xhtml">
        <ui:define name="content">              
            <h:form id="productform" enctype="multipart/form-data" rendered="#{loginManagedBean.isLoggedIn}">
                <p:growl id="messages" autoUpdate="true" redisplay="false" showDetail="true"/>

                <p:panel header="Brand Management" id="brandpanel">
                    <h:panelGrid columns="2" cellspacing="20">

                        <p:outputLabel value="Branch Name"/>
                        <p:selectOneMenu id="branchname" value="#{brandManagedBean.branchId}" style="width: 200px;">
                            <f:selectItem itemLabel="Select Branch" itemValue=""/>
                            <f:selectItems value="#{brandManagedBean.branchNamesMap}"/>
                               <p:ajax listener="#{brandManagedBean.selectBrands()}" update="brandpanel"/>
                        </p:selectOneMenu>

                        <p:outputLabel value="Brand Name"/>
                        <p:selectOneMenu id="brandname" value="#{brandManagedBean.id}" style="width: 200px;">
                            <f:selectItem itemLabel="Select Brands" itemValue=""/>
                            <f:selectItems value="#{brandManagedBean.brandNamesMap}"/>
                            <p:ajax event="change"/>
                        </p:selectOneMenu>

                        <p:outputLabel value="New or update brand name"/>
                        <p:inputText value="#{brandManagedBean.name}">
                            <p:ajax event="change"/>
                        </p:inputText>  
                    </h:panelGrid>
                    <h:panelGrid columns="3">
                        <p:commandButton update="brandpanel" actionListener="#{brandManagedBean.insertBrand()}" value="Add"/>
                        <p:commandButton update="brandpanel" actionListener="#{brandManagedBean.updateBrand()}" value="Update"/>
                        <p:commandButton update="brandpanel" actionListener="#{brandManagedBean.deleteBrand()}" value="Delete"/>
                    </h:panelGrid>
                </p:panel>

                <p:panel header="Category Management" id="categorypanel">
                    <h:panelGrid columns="2" cellspacing="20">

                        <p:outputLabel value="Branch Name"/>
                        <p:selectOneMenu id="categorybranchname" value="#{categoryManagedBean.branchId}" style="width: 200px;">
                            <f:selectItem itemLabel="Select Branch" itemValue=""/>
                            <f:selectItems value="#{categoryManagedBean.branchNamesMap}"/>
                            <p:ajax listener="#{categoryManagedBean.selectFloors()}" update="categorypanel"/>
                        </p:selectOneMenu>

                        <p:outputLabel value="Floor Name"/>
                        <p:selectOneMenu id="categoryfloorname" value="#{categoryManagedBean.floorId}" style="width: 200px;">
                            <f:selectItem itemLabel="Select Floor" itemValue=""/>
                            <f:selectItems value="#{categoryManagedBean.floorsMap}"/>
                            <p:ajax listener="#{categoryManagedBean.selectCategories()}" update="categorypanel"/>
                            <p:ajax listener="#{categoryManagedBean.loadTreeTable()}" update="categorytree"/>
                        </p:selectOneMenu>
                    </h:panelGrid>  

                    <h:panelGrid columns="4">
                        <p:outputLabel value="Category Name"/>
                        <p:selectOneMenu id="categoryname" value="#{categoryManagedBean.catId}" style="width: 200px;">
                            <f:selectItem itemLabel="Select Category" itemValue=""/>
                            <f:selectItems value="#{categoryManagedBean.categoryMap}"/>
                            <p:ajax listener="#{categoryManagedBean.selectSubCategory1()}" update="categorypanel"/>
                        </p:selectOneMenu>                              

                        <p:outputLabel value="New Category Name"/>
                        <p:inputText value="#{categoryManagedBean.catName}">
                            <p:ajax event="change"/>
                        </p:inputText> 
                    </h:panelGrid>

                    <h:panelGrid columns="4">
                        <p:outputLabel value="Item Name"/>
                        <p:selectOneMenu id="subcategoryname" value="#{categoryManagedBean.subcat1Id}" style="width: 200px;">
                            <f:selectItem itemLabel="Select Item" itemValue=""/>
                            <f:selectItems value="#{categoryManagedBean.subCategory1Map}"/>
                            <p:ajax event="change"/>
                        </p:selectOneMenu>

                        <p:outputLabel value="New Item Name"/>
                        <p:inputText value="#{categoryManagedBean.subcat1Name}">
                            <p:ajax event="change"/>
                        </p:inputText> 
                    </h:panelGrid>

                    <h:panelGrid columns="3">
                        <p:commandButton update="categorypanel" actionListener="#{categoryManagedBean.insertCategory()}" value="Add"/>    
                    </h:panelGrid>                    

                    <p:treeTable id="categorytree" value="#{categoryManagedBean.root}" var="catdto"
                                 selectionMode="single" selection="#{categoryManagedBean.selectNode}">

                        <f:facet id="face1" name="header">
                            Categories
                        </f:facet>

                        <p:column id="col1">
                            <f:facet name="header" id="face2">
                                Category Name
                            </f:facet>
                            <h:outputLabel id="out1" value="#{catdto.name}"/>
                        </p:column>

                        <p:column id="col2">
                           <f:facet name="header" id="face3">
                               Edit
                           </f:facet>
                            <p:commandLink id="com1" update=":productform:documentPanel" oncomplete="PF('documentDialog').show()" title="Update Form" styleClass="ui-icon ui-icon-pencil"  >
                               <f:setPropertyActionListener value="#{catdto}" target="#{categoryManagedBean.selectedCategoryDto}" />
                           </p:commandLink>
                        </p:column>

                        <p:column id="col3">  
                           <f:facet name="header" id="face4">
                               Delete
                           </f:facet>
                            <p:commandLink id="com2" action="#{categoryManagedBean.deleteCategory(category)}" type="button"                          
                                style="float: right; background-image: url('../resources/images/delete.jpg'); background-repeat: no-repeat;
                                background-size: 100% 100%; background-origin : border-box; width: 30px; height: 20px;">          
                           </p:commandLink>                               
                        </p:column>
                    </p:treeTable> 

                </p:panel>
                    <p:dialog id="dialog" header="Update Form" showEffect="fade" widgetVar="documentDialog" modal="false" maximizable="true" minimizable="true">  
                        <p:outputPanel id="documentPanel">  
                            <h:panelGrid  columns="2" cellpadding="5">  
                                <h:outputLabel for="name" value="Category: " /> 
                                <p:inplace id="basic">
                                    <h:inputText id="name" value="#{categoryManagedBean.selectedCategoryDto.name}" style="font-weight:bold" />  
                                </p:inplace>                               

                                <h:panelGrid columns="2" style="margin-left: 100px">
                                    <p:commandButton action="#{categoryManagedBean.updateCategory()}" value="Update" ajax="false" update=":categorypanel"/>                      
                                    <p:commandButton action="#{categoryManagedBean.clear}" value="Clear" id="btnclear" ajax="false" />
                                </h:panelGrid>  
                            </h:panelGrid>  
                        </p:outputPanel>  
                    </p:dialog>                         

            </h:form>
        </ui:define>
    </ui:composition>
</h:body>
</html>

堆栈跟踪

SEVERE: JSF1007: Duplicate component ID productform:categorytree:col1 found in view.
Dec 12, 2013 5:27:01 PM com.sun.faces.util.Util checkIdUniqueness
SEVERE: +id: j_id1
type: javax.faces.component.UIViewRoot@9ce387
+id: javax_faces_location_HEAD
 type: com.sun.faces.component.ComponentResourceContainer@1f54217
+id: j_id2
 type: javax.faces.component.UIOutput@c5f91c
+id: j_id3
 type: javax.faces.component.UIOutput@165c08a
+id: j_id4
 type: javax.faces.component.UIOutput@143b527
+id: j_id5
 type: javax.faces.component.UIOutput@2a237a
+id: j_id6
 type: javax.faces.component.UIOutput@7f29f4
+id: j_id7
 type: javax.faces.component.UIOutput@9b66f1
+id: j_id8
 type: javax.faces.component.UIOutput@837332
+id: j_id9
 type: javax.faces.component.UIOutput@1fffbc8
+id: j_idt1
type: <html xmlns="http://www.w3.org/1999/xhtml">


+id: j_idt2
 type: javax.faces.component.UIOutput@1ddf77
+id: j_idt3
 type: 
            <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
            <title>Madharsha Control Panel Page</title>

  +id: j_idt4
  type: javax.faces.component.html.HtmlBody@14ba6a4
   +id: j_idt5
   type: org.primefaces.component.layout.Layout@1a96d23
   +id: header
   type: org.primefaces.component.layout.LayoutUnit@3c41cb
    +id: j_idt6
     type: org.primefaces.component.outputlabel.OutputLabel@39137
     +id: j_idt7
      type: org.primefaces.component.layout.LayoutUnit@32e320
      +id: layoutform
      type: javax.faces.component.html.HtmlForm@dd4f1b
       +id: rootmenu
       type: org.primefaces.component.menubar.Menubar@1747f49
        +id: homemenu
         type: org.primefaces.component.menuitem.UIMenuItem@150d2fe
        +id: mastermenu
         type: org.primefaces.component.submenu.UISubmenu@14c3f17
          +id: j_idt8
           type: org.primefaces.component.menuitem.UIMenuItem@c23503
          +id: j_idt9
           type: org.primefaces.component.menuitem.UIMenuItem@265e80
        +id: tabletmenu
         type: org.primefaces.component.menuitem.UIMenuItem@1063704
        +id: logoutmenu
         type: org.primefaces.component.menuitem.UIMenuItem@105ea2f
        +id: loginmenu
         type: org.primefaces.component.menuitem.UIMenuItem@151e258
      +id: productform
      type: javax.faces.component.html.HtmlForm@e33152
       +id: messages
       type: org.primefaces.component.growl.Growl@1bb22d9
       +id: brandpanel
       type: org.primefaces.component.panel.Panel@ed0cd7
        +id: j_idt10
         type: javax.faces.component.html.HtmlPanelGrid@e60409
          +id: j_idt11
           type: org.primefaces.component.outputlabel.OutputLabel@11325cd
          +id: branchname
           type: org.primefaces.component.selectonemenu.SelectOneMenu@16e471
            +id: j_idt12
             type: javax.faces.component.UISelectItem@efdaaa
            +id: j_idt13
             type: javax.faces.component.UISelectItems@fcd37b
          +id: j_idt14
           type: org.primefaces.component.outputlabel.OutputLabel@a04e7e
          +id: brandname
           type: org.primefaces.component.selectonemenu.SelectOneMenu@814915
            +id: j_idt15
             type: javax.faces.component.UISelectItem@1e52afd
            +id: j_idt16
             type: javax.faces.component.UISelectItems@697520
          +id: j_idt17
           type: org.primefaces.component.outputlabel.OutputLabel@1888b29
          +id: j_idt18
           type: org.primefaces.component.inputtext.InputText@1686d07
        +id: j_idt19
         type: javax.faces.component.html.HtmlPanelGrid@ce1366
          +id: j_idt20
           type: org.primefaces.component.commandbutton.CommandButton@15b920e
          +id: j_idt21
           type: org.primefaces.component.commandbutton.CommandButton@d1de09
          +id: j_idt22
           type: org.primefaces.component.commandbutton.CommandButton@482a86
       +id: categorypanel
       type: org.primefaces.component.panel.Panel@1dfcbc3
        +id: j_idt23
         type: javax.faces.component.html.HtmlPanelGrid@1baa99d
          +id: j_idt24
           type: org.primefaces.component.outputlabel.OutputLabel@1d590a3
          +id: categorybranchname
           type: org.primefaces.component.selectonemenu.SelectOneMenu@afcd9
            +id: j_idt25
             type: javax.faces.component.UISelectItem@15e0b9b
            +id: j_idt26
             type: javax.faces.component.UISelectItems@14bfd33
          +id: j_idt27
           type: org.primefaces.component.outputlabel.OutputLabel@1dc4c0b
          +id: categoryfloorname
           type: org.primefaces.component.selectonemenu.SelectOneMenu@485e7
            +id: j_idt28
             type: javax.faces.component.UISelectItem@f326a7
            +id: j_idt29
             type: javax.faces.component.UISelectItems@16ed6d9
        +id: j_idt30
         type: javax.faces.component.html.HtmlPanelGrid@1db4fa7
          +id: j_idt31
           type: org.primefaces.component.outputlabel.OutputLabel@14a8a00
          +id: categoryname
           type: org.primefaces.component.selectonemenu.SelectOneMenu@aa4749
            +id: j_idt32
             type: javax.faces.component.UISelectItem@12e467c
            +id: j_idt33
             type: javax.faces.component.UISelectItems@11589f6
          +id: j_idt34
           type: org.primefaces.component.outputlabel.OutputLabel@1147608
          +id: j_idt35
           type: org.primefaces.component.inputtext.InputText@511e57
        +id: j_idt36
         type: javax.faces.component.html.HtmlPanelGrid@19eef40
          +id: j_idt37
           type: org.primefaces.component.outputlabel.OutputLabel@16d756e
          +id: subcategoryname
           type: org.primefaces.component.selectonemenu.SelectOneMenu@138c603
            +id: j_idt38
             type: javax.faces.component.UISelectItem@50093a
            +id: j_idt39
             type: javax.faces.component.UISelectItems@8dea14
          +id: j_idt40
           type: org.primefaces.component.outputlabel.OutputLabel@102f163
          +id: j_idt41
           type: org.primefaces.component.inputtext.InputText@35cd5d
        +id: j_idt42
         type: javax.faces.component.html.HtmlPanelGrid@3dc0e2
          +id: j_idt43
           type: org.primefaces.component.commandbutton.CommandButton@4269de
        +id: categorytree
         type: org.primefaces.component.treetable.TreeTable@349f31
          +id: j_idt44
           type: 
                            Categories

          +id: col1  <===============
           type: org.primefaces.component.column.Column@eb38b5
            +id: out1
             type: javax.faces.component.html.HtmlOutputLabel@d802ee
          +id: col2
           type: org.primefaces.component.column.Column@1a88afb
            +id: com1
             type: org.primefaces.component.commandlink.CommandLink@3c7600
          +id: col3
           type: org.primefaces.component.column.Column@1671af2
            +id: com2
             type: org.primefaces.component.commandlink.CommandLink@1a2769
          +id: col1  <===============
           type: org.primefaces.component.column.Column@bf5e96
            +id: j_idt45
             type: 
                                Category Name

            +id: out1
             type: javax.faces.component.html.HtmlOutputLabel@2e2067
          +id: col2
           type: org.primefaces.component.column.Column@51703d
            +id: j_idt46
             type: 
                               Edit

            +id: com1
             type: org.primefaces.component.commandlink.CommandLink@9fc24a
          +id: col3
           type: org.primefaces.component.column.Column@8cb5ba
            +id: j_idt47
             type: 
                               Delete

            +id: com2
             type: org.primefaces.component.commandlink.CommandLink@1eef7db
      +id: dialog
       type: org.primefaces.component.dialog.Dialog@1d26686
        +id: documentPanel
         type: org.primefaces.component.outputpanel.OutputPanel@491682
          +id: j_idt48
           type: javax.faces.component.html.HtmlPanelGrid@64db02
            +id: j_idt49
             type: javax.faces.component.html.HtmlOutputLabel@1667f48
            +id: basic
             type: org.primefaces.component.inplace.Inplace@2e50af
              +id: name
               type: javax.faces.component.html.HtmlInputText@b34ab2
            +id: j_idt50
             type: javax.faces.component.html.HtmlPanelGrid@ed25ec
              +id: j_idt51
               type: org.primefaces.component.commandbutton.CommandButton@154ae8e
              +id: btnclear
               type: org.primefaces.component.commandbutton.CommandButton@90196c
      +id: footer
      type: org.primefaces.component.layout.LayoutUnit@753f4a
      +id: j_idt52
     type: org.primefaces.component.outputlabel.OutputLabel@18e3248
   +id: j_idt53
     type: 
     </html>

   Dec 12, 2013 5:27:01 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
      SEVERE: Error Rendering View[/product/productmanage.xhtml]
      java.lang.IllegalStateException: Component ID productform:categorytree:col1 has already been found in the view.  
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:974)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:958)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:958)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:958)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:958)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:958)
at com.sun.faces.util.Util.checkIdUniqueness(Util.java:958)
at com.sun.faces.application.view.FaceletFullStateManagementStrategy.saveView(FaceletFullStateManagementStrategy.java:706)
at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:89)
at javax.faces.application.StateManager.getViewState(StateManager.java:593)
at com.sun.faces.context.PartialViewContextImpl.renderState(PartialViewContextImpl.java:454)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:322)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:57)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1896)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:425)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

2 个答案:

答案 0 :(得分:6)

我解决了错误。我不知道为什么Jsf需要在bean的构造函数中初始化所有treenode。我用空字符串值初始化所有treenode,然后一切正常。它适用于 Session / View Scoped bean。

更新:1 由于不正确的ajax更新,也可能发生此错误。我试图从每个组件发出ajax请求并更新整个面板(面板内部的组件)。然后我更改了更新以仅更新特定视图Eg。 selectOneMenu用于。这里的解决方案是仅更新特定组件而不更新整个表单或视图。

UPDDATE:2 我在web.xml文件中将param-value从false更改为true,然后解决了这个问题,

<context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>true</param-value>
</context-param>

答案 1 :(得分:0)

我通过将保存状态方法设置为&#34; server&#34;来修复它。而不是&#34;客户&#34;:

<context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>