自动生成的JSF组件ID中的重复ID

时间:2012-08-06 09:05:00

标签: java jsf richfaces facelets myfaces

我在JSF页面中随机出现重复的ID错误,在所有实例中,重复的ID都是自动生成的(如j_id15)。

我在页面中的指定ID中没有任何重复项。问题不一致,我的意思是,页面视图可能会丢失重复的ID错误,下次我发送同一页面的请求时,它运行得很好,没有任何错误。这不是一个单独的页面,我的项目中有各种页面具有相同的问题。

从myfaces 2.0.5升级到myfaces 2.0.14(最新2.0.x版本)后,问题开始显现

这是myfaces实现中的错误吗?或者我做错了什么?

堆栈跟踪如下所示:

Caused by: java.lang.IllegalStateException: Client-id : j_id15 is duplicated in the faces tree. Component : posSelectionFrm:posSelSubview_first:posHasAccessTable:j_id15, path: ...[Class: javax.faces.component.UINamingContainer,Id: posSelSubview_first][Class: javax.faces.component.html.HtmlDataTable,Id: posHasAccessTable][Class: javax.faces.component.UIColumn,Id: titleColumn2][Class: com.sun.facelets.compiler.UIInstructions,Id: j_id15]}
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:280)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.checkForDuplicateIds(StateManagerImpl.java:302)
at org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:220)
at javax.faces.application.StateManager.saveSerializedView(StateManager.java:113)
at javax.faces.application.StateManagerWrapper.saveSerializedView(StateManagerWrapper.java:41)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:617)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:239)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)
... 71 more

并且,我意识到默认情况下myfaces不应该检查自动生成的ID的重复项。但为了确保,我在web.xml中定义了以下设置:

<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Production</param-value>
</context-param>

<context-param>
    <param-name>org.apache.myfaces.CHECK_ID_PRODUCTION_MODE</param-name>
    <param-value>false</param-value>
</context-param>

但问题仍然存在。

该项目使用在Tomcat 6.0上运行的Apache MyFaces 2.0.14,Facelets 1.1.15,RichFaces 3.3.3.Final。

1 个答案:

答案 0 :(得分:0)

web.xml文件中定义的不同过滤器的一些问题发生冲突。因此,检查RichFaces过滤器必须是web.xml配置文件中其他过滤器中的第一个。

相关问题