h:dataTable binding =>重复ID

我使用HtmlDataTable查看数据库中的数据时遇到问题。

当我创建组件时,该表有时(不总是) 两列的列数

它被正确显示并且经过几次刷新(没有在dtb或其他东西中移动),例如有6列而不是3列,应用程序(有时)变得不稳定。 从那时起,我无法使用表,因为它报告“组件的重复ID”。

简单的例子(来源: http : //balusc.blogspot.com/2006/06/using-datatables.html ):

                 

和java.class

 protected HtmlDataTable dataTable; public void setDataTable(HtmlDataTable dataTable) { this.dataTable = dataTable; } public HtmlDataTable getDataTable() { if (dataTable == null) { dataTable = new HtmlDataTable(); dataTable.setRows(DEFAULT_TABLE_ROWS); } return dataTable; } 

和错误消息:

 javax.servlet.ServletException: Component ID j_idt92:bde:tbl:j_idt129 has already been found in the view. javax.faces.webapp.FacesServlet.service(FacesServlet.java:422) root cause java.lang.IllegalStateException: Component ID j_idt92:bde2:tbl:j_idt129 has already been found in the view. com.sun.faces.util.Util.checkIdUniqueness(Util.java:821) com.sun.faces.util.Util.checkIdUniqueness(Util.java:805) com.sun.faces.util.Util.checkIdUniqueness(Util.java:805) com.sun.faces.util.Util.checkIdUniqueness(Util.java:805) com.sun.faces.util.Util.checkIdUniqueness(Util.java:805) com.sun.faces.util.Util.checkIdUniqueness(Util.java:805) com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:144) com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:133) com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225) com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:418) com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) javax.faces.webapp.FacesServlet.service(FacesServlet.java:410) 

其次是组件树。 我认为代码中没有任何重复,但dataTable创建了一个新列,之后它真的是重复的

我有两个工作类似的模块,第三个不起作用。

你遇到过这种问题吗?

谢谢你的建议

如果bean是会话作用域而不是请求作用域,并且您在多个视图之间共享此bean,则会发生这种情况。 最好的方法是在请求范围内保留组件绑定到的bean。

作为替代方案,您还可以使用DataModel作为值,而不是将表绑定到HtmlDataTable如果function要求是获取当前选定的行。