Java h:dataTable绑定=>;重复ID

Java h:dataTable绑定=>;重复ID,java,jsf,Java,Jsf,我在使用HtmlDataTable查看数据库中的数据时遇到问题 创建组件时,表中的列数有时(并非总是)是原来的两倍 它显示正确,在多次刷新(没有在dtb中移动或其他内容)后,例如有6列而不是3列,并且应用程序(有时)变得不稳定。 因为这一次我不能使用表,因为它报告了“组件的重复Id” 简单示例(来源:): 以及错误消息: javax.servlet.ServletException: Component ID j_idt92:bde:tbl:j_idt129 has already been f

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

创建组件时,表中的列数有时(并非总是)是原来的两倍

它显示正确,在多次刷新(没有在dtb中移动或其他内容)后,例如有6列而不是3列,并且应用程序(有时)变得不稳定。 因为这一次我不能使用表,因为它报告了“组件的重复Id”

简单示例(来源:):

以及错误消息:

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保留在请求范围中


另一种选择是,如果功能要求是获取当前选定的行,您也可以使用As value,而不是将表绑定到
HtmlDataTable

您(再次)保存了我。我花了一整天在这上面,什么也没做。现在它工作了!谢谢你,BalusBalusc,在将范围更改为请求后,我不能再使用DataTable(保存、编辑、删除、添加到dtb)。它报告null异常,因为对象在响应后过期。我能用点什么吗?我尝试过使用ViewScope,但它似乎不适合绑定HtmlDataTable。还是有别的办法解决?或者我真的应该尝试使用DataModel?解决了>@ViewScoped+实现可序列化+私有瞬态HtmlDataTable哦,你在使用JSF 2.0?您应该提到:)您可以在这里找到一个带有
@ViewScoped
DataModel
的CRUD示例:我是新手,JSF2.0是我的第一选择。例如,谢谢,我已经使用过:),我将尝试在下一个视图中使用DataModel。但我不明白这一点:“@ViewScoped在任何UIComponent使用binding属性绑定到bean时都会中断”。它适合我,datatable绑定和ViewScope绑定在一起。。。
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)