我收到一个错误,例如已在树表列标记中的视图中找到组件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)
答案 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>