2013-12-12 12 views
6

Mi viene visualizzato un errore come Componente ID componente già presente nella vista nella tabella ad albero tag colonna con id = col1. Ho due Managed Beans per questo singolo file xhtml ed entrambi hanno scope di sessione.ID componente duplicato trovato in vista

<?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> 

Stack Trace

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: [email protected] 
+id: javax_faces_location_HEAD 
type: [email protected] 
+id: j_id2 
type: [email protected] 
+id: j_id3 
type: [email protected] 
+id: j_id4 
type: [email protected] 
+id: j_id5 
type: [email protected] 
+id: j_id6 
type: [email protected] 
+id: j_id7 
type: [email protected] 
+id: j_id8 
type: [email protected] 
+id: j_id9 
type: [email protected] 
+id: j_idt1 
type: <html xmlns="http://www.w3.org/1999/xhtml"> 


+id: j_idt2 
type: [email protected] 
+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: [email protected] 
    +id: j_idt5 
    type: [email protected] 
    +id: header 
    type: [email protected] 
    +id: j_idt6 
    type: [email protected] 
    +id: j_idt7 
     type: [email protected] 
     +id: layoutform 
     type: [email protected] 
     +id: rootmenu 
     type: [email protected] 
     +id: homemenu 
     type: [email protected] 
     +id: mastermenu 
     type: [email protected] 
      +id: j_idt8 
      type: [email protected] 
      +id: j_idt9 
      type: [email protected] 
     +id: tabletmenu 
     type: [email protected] 
     +id: logoutmenu 
     type: [email protected] 
     +id: loginmenu 
     type: [email protected] 
     +id: productform 
     type: [email protected] 
     +id: messages 
     type: [email protected] 
     +id: brandpanel 
     type: [email protected] 
     +id: j_idt10 
     type: [email protected] 
      +id: j_idt11 
      type: [email protected] 
      +id: branchname 
      type: [email protected] 
      +id: j_idt12 
      type: [email protected] 
      +id: j_idt13 
      type: [email protected] 
      +id: j_idt14 
      type: [email protected] 
      +id: brandname 
      type: [email protected] 
      +id: j_idt15 
      type: [email protected] 
      +id: j_idt16 
      type: [email protected] 
      +id: j_idt17 
      type: [email protected] 
      +id: j_idt18 
      type: [email protected] 
     +id: j_idt19 
     type: [email protected] 
      +id: j_idt20 
      type: [email protected] 
      +id: j_idt21 
      type: [email protected] 
      +id: j_idt22 
      type: [email protected] 
     +id: categorypanel 
     type: [email protected] 
     +id: j_idt23 
     type: [email protected] 
      +id: j_idt24 
      type: [email protected] 
      +id: categorybranchname 
      type: [email protected] 
      +id: j_idt25 
      type: [email protected] 
      +id: j_idt26 
      type: [email protected] 
      +id: j_idt27 
      type: [email protected] 
      +id: categoryfloorname 
      type: [email protected] 
      +id: j_idt28 
      type: [email protected] 
      +id: j_idt29 
      type: [email protected] 
     +id: j_idt30 
     type: [email protected] 
      +id: j_idt31 
      type: [email protected] 
      +id: categoryname 
      type: [email protected] 
      +id: j_idt32 
      type: [email protected] 
      +id: j_idt33 
      type: [email protected] 
      +id: j_idt34 
      type: [email protected] 
      +id: j_idt35 
      type: [email protected] 
     +id: j_idt36 
     type: [email protected] 
      +id: j_idt37 
      type: [email protected] 
      +id: subcategoryname 
      type: [email protected] 
      +id: j_idt38 
      type: [email protected] 
      +id: j_idt39 
      type: [email protected] 
      +id: j_idt40 
      type: [email protected] 
      +id: j_idt41 
      type: [email protected] 
     +id: j_idt42 
     type: [email protected] 
      +id: j_idt43 
      type: [email protected] 
     +id: categorytree 
     type: [email protected] 
      +id: j_idt44 
      type: 
          Categories 

      +id: col1 <=============== 
      type: [email protected] 
      +id: out1 
      type: [email protected] 
      +id: col2 
      type: [email protected] 
      +id: com1 
      type: [email protected] 
      +id: col3 
      type: [email protected] 
      +id: com2 
      type: [email protected] 
      +id: col1 <=============== 
      type: [email protected] 
      +id: j_idt45 
      type: 
           Category Name 

      +id: out1 
      type: [email protected] 
      +id: col2 
      type: [email protected] 
      +id: j_idt46 
      type: 
           Edit 

      +id: com1 
      type: [email protected] 
      +id: col3 
      type: [email protected] 
      +id: j_idt47 
      type: 
           Delete 

      +id: com2 
      type: [email protected] 
     +id: dialog 
     type: [email protected] 
     +id: documentPanel 
     type: [email protected] 
      +id: j_idt48 
      type: [email protected] 
      +id: j_idt49 
      type: [email protected] 
      +id: basic 
      type: [email protected] 
       +id: name 
       type: [email protected] 
      +id: j_idt50 
      type: [email protected] 
       +id: j_idt51 
       type: [email protected] 
       +id: btnclear 
       type: [email protected] 
     +id: footer 
     type: [email protected] 
     +id: j_idt52 
    type: [email protected] 
    +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) 
+0

Si sta definitivamente mescolando gli ambiti necessari. Quella vista dovrebbe trovarsi in un bean '@ ViewScoped'. Se hai bisogno dei valori in un'altra vista, passa semplicemente come parametri o mantieni ** solo ciò che ti serve ** su '@ SessionScoped'. In relazione al problema, se mi fornisci un [SSCCE] (http://sscce.org/) con il codice che posso copiare e incollare, sarò grato di fare alcuni test. Quali versioni di implementazione di jsf primefaces stai usando? –

+0

Primefaces 4.0 e JSF 2.2, Come posso fornire il codice? – Ajeesh

+0

@XtremeBiker Ricevo l'errore quando fornisco ** ** tag ajax ma questo è necessario per caricare il successivo panelgrid. – Ajeesh

risposta

5

ho risolto l'errore. Non so perché Jsf abbia bisogno di inizializzare tutti i treenode all'interno del costruttore di bean. Inizializzato tutti i treenodes con valore di stringa vuoto e quindi tutto funziona correttamente. Funziona sia in Session/View Scoped bean.

UPDATE: 1 Questo errore può verificarsi anche a causa di updations ajax errati. Stavo cercando di fare una richiesta jax da ciascun componente e di aggiornare l'intero pannello (Componenti all'interno di un pannello). Quindi ho modificato gli aggiornamenti per aggiornare solo la vista specifica Eg. SelectOneMenu. La soluzione qui è aggiornare solo componenti specifici senza aggiornare l'intero modulo o vista.

UPDDATE: 2 ho cambiato nel file web.xml param-valore da false a true, allora il problema è risolto,

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

Felice di vederlo. Probabilmente è legato al ciclo di vita dei componenti. Tuttavia non può vederlo senza il bean gestito correlato. –

+0

@Xtreme Biker Ok, grazie per l'aiuto amico. – Ajeesh

+0

Ho avuto un problema simile durante il passaggio a JSF 2.2, che anch'io ho risolto rimuovendo del tutto il context-param PARTIAL_STATE_SAVING. In precedenza avevo impostato su false per abilitare la soluzione alternativa discussa qui: http://balusc.blogspot.com/2010/06/benefits-and-pitfalls-of-viewscoped.html –

0

ho riparato impostando salvando il metodo dello stato di "server" invece di "client":

<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> 
Problemi correlati