Jsf MyFaces:启用部分状态保存后,所有页面都会抛出重复id错误

Jsf MyFaces:启用部分状态保存后,所有页面都会抛出重复id错误,jsf,jsf-2,primefaces,myfaces,Jsf,Jsf 2,Primefaces,Myfaces,在使用PrimeFaces(当前最新版本:5.1)的JSF2.2项目中,我遇到了方面的问题。在多上传场景中,未上传随机选择的文件。通过在web.xml中启用部分状态保存(PSS),问题最终得以解决: <context-param> <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name> <param-value>true</param-value> </c

在使用PrimeFaces(当前最新版本:5.1)的JSF2.2项目中,我遇到了
方面的问题。在多上传场景中,未上传随机选择的文件。通过在web.xml中启用部分状态保存(PSS),问题最终得以解决:

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

javax.faces.PARTIAL_STATE_保存
真的
现在,在启用PSS之后,几乎所有的页面都会抛出重复id异常(尽管实际上没有重复0。我有带有
的CRUD页面,并绑定到查看范围bean。当我切换到Mojarra时,重复id错误消失了,但出于某些原因,我想使用MyFaces。有什么解决方法吗?这是MyFaces的错误吗

我使用的是MyFaces 2.2.5。这里是堆栈跟踪的相关部分(在第90行,我在
中有第一个
):

2014-11-01 11:31:51390在相位渲染响应期间组件null出现错误未处理异常(6):
org.apache.myfaces.view.facelets.compiler.DuplicateIdeException:找到具有重复id的组件“form:keywordDataTable:j_id_39”。第一个组件是/admin/keyword.xhtml,位于第90行和第99列
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.createAndQueueException(CheckDuplicateIdFaceletUtils.java:152)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkId(CheckDuplicateIdFaceletUtils.java:107)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkId(CheckDuplicateIdFaceletUtils.java:124)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkId(CheckDuplicateIdFaceletUtils.java:124)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkId(CheckDuplicateIdFaceletUtils.java:124)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkId(CheckDuplicateIdFaceletUtils.java:124)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkId(CheckDuplicateIdFaceletUtils.java:89)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.saveView(DefaultFaceletsStateManagementStrategy.java:688)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:213)~[myfaces-impl-2.2.5.jar:2.2.5]
在javax.faces.application.StateManager.getViewState(StateManager.java:262)~[myfaces-api-2.2.5.jar:2.2.5]
在org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartialRendering(PartialViewContextImpl.java:581)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:415)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)~[primefaces-5.1.1-UR.jar:5.1.1-UR]
在javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:85)~[myfaces-api-2.2.5.jar:2.2.5]
在javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:516)~[myfaces-api-2.2.5.jar:2.2.5]
在javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541)~[myfaces-api-2.2.5.jar:2.2.5]
在org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1891)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:313)~[myfaces-impl-2.2.5.jar:2.2.5]
在javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58)~[myfaces-api-2.2.5.jar:2.2.5]
在org.apache.myfaces.lifecycle.renderresponseecutor.execute(renderresponseecutor.java:116)~[myfaces-impl-2.2.5.jar:2.2.5]
在org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267)~[myfaces-impl-2.2.5.jar:2.2.5]
在javax.faces.webapp.FacesServlet.service(FacesServlet.java:200)[myfaces-api-2.2.5.jar:2.2.5]
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)[catalina.jar:7.0.47]
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina.jar:7.0.47]
在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)[tomcat7websocket.jar:7.0.47]
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)[catalina.jar:7.0.47]
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina.jar:7.0.47]

仅供参考,JSF规范第3.1.5节“组件绑定”中说:“…如果应用程序开发人员将组件绑定表达式指向的托管bean放在请求范围以外的任何范围内,系统将无法正常运行…当将组件绑定放在“会话”或“视图”范围内时,也可能会对内存管理产生负面影响…”。。。"

我认为MyFaces中没有错误。附加堆栈跟踪可能会有所帮助。下面是一篇相关帖子:。请注意,在我的情况下,我不访问会话范围的绑定,而是查看范围的bean。当我删除绑定时,重复错误得到解决,但我无法删除它们。堆栈跟踪是针对Mojara的,而不是针对MyFaces的。我认为您的问题与use view scope bean来保存组件绑定。我的建议是在组件绑定中使用always request scope bean,并从您的request scope bean中引用view scope bean,否则组件将被view scope bean序列化,这可能会导致问题。这不是错误,而是JS上的问题F spec.OK,当组件序列化时
2014-11-01 11:31:51,390 ERROR <admin> Unhandled exception on component null during phase RENDER_RESPONSE(6): 
org.apache.myfaces.view.facelets.compiler.DuplicateIdException: Component with duplicate id "form:keywordDataTable:j_id_39" found. The first component is /admin/keyword.xhtml at line 90 and column 99
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.createAndQueueException(CheckDuplicateIdFaceletUtils.java:152) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:107) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:124) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:124) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:124) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:124) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:89) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.saveView(DefaultFaceletsStateManagementStrategy.java:688) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:213) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at javax.faces.application.StateManager.getViewState(StateManager.java:262) ~[myfaces-api-2.2.5.jar:2.2.5]
    at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartialRendering(PartialViewContextImpl.java:581) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:415) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60) ~[primefaces-5.1.1-UR.jar:5.1.1-UR]
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:85) ~[myfaces-api-2.2.5.jar:2.2.5]
    at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:516) ~[myfaces-api-2.2.5.jar:2.2.5]
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541) ~[myfaces-api-2.2.5.jar:2.2.5]
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1891) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:313) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) ~[myfaces-api-2.2.5.jar:2.2.5]
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) ~[myfaces-impl-2.2.5.jar:2.2.5]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) [myfaces-api-2.2.5.jar:2.2.5]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) [catalina.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.47]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) [tomcat7-websocket.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.47]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.47]