java - 自动生成的 JSF 组件 ID 中存在重复 ID

标签 java jsf richfaces facelets myfaces

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

我在页面中的指定 ID 中没有任何重复项。而且问题并不一致,我的意思是,页面 View 可能会引发重复的 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。

最佳答案

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

关于java - 自动生成的 JSF 组件 ID 中存在重复 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825298/

相关文章:

java - 如何在 Tomcat 服务器上使用 jfs 在 Java Web 应用程序中定义文件路径

java - 检查instanceOf但不执行

java.lang.ClassNotFoundException : int on reading serialized session data 异常

java - LibGDX True Type 字体在按钮中的使用

java - JSF 链接到外部文件

java - 如何突出显示 JSF 数据表中的特定行

java - 丰富 :dataScroller does not refresh rich:dataTable in JSF

java - @PostConstruct 不要调用 session 托管 bean

java - 当 JUnit 5 的外部测试用例失败时不要启动嵌套测试用例

java - 开发和部署 ReSTLet 服务