我创建了一个GWT DataGrid(基本上就像一个celltable一样)并且收到了一个非常奇怪的错误。
java.lang.IllegalStateException: A possible infinite loop has been detected in a Cell
Widget. This usually happens when your SelectionModel triggers a SelectionChangeEvent
when SelectionModel.isSelected() is called, which causes the table to redraw continuously.
我在网上搜索时发现这个错误的信息非常少,而且它根本不影响前端,事实上,它完美无缺。然而,当特定情况发生时,它仍会出现日食错误。
如何重现错误:
- 选择特定过滤器(无法识别每个过滤器不一致错误的原因)
- 选择包含用(...)隐藏的数据然后键入左或右键盘箭头的单元格。 CSS工作原理当用户将鼠标悬停在单元格上时,行高会展开并显示所有文本。)
导致/修复错误的原因:
错误似乎来自代码行:
myDataTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELCTION);
当我评论此行时,错误不再发生。问题是功能然后是不希望的,因为键盘选择与鼠标选择和整个" 3活动状态分开#34;问题存在。
关于我的代码:
我正在使用:
-SingleSelectionModel
-DoubleClick DOM处理程序
-SelectionChangeEvent.Handler(即使这被注释掉,错误仍会显示)
更新 更多信息:
当我在调试器中执行它时,它只是继续调用onSelectionChange 5次然后错误输出。然后,就像我说的,如果我删除了SelectionChange处理程序,它将不会命中我的文件中的任何断点,但会再次转到GWT文件HasDataPresenter.Class并继续运行,直到它最终出现错误(循环样式)。
此外,如果我首先选择一个没有省略号(...)的单元格和箭头,那么我就不会收到错误。只有当我最初选择带有(...)和箭头的单元格时,它才会出错。
答案 0 :(得分:0)
由于您没有提供任何代码,我不得不猜测。
设置/隐藏省略号的方式会触发要重绘的表。反过来,这会触发选择事件(选择相同的单元格)。选择一个单元格后,它会触发另一个表格重绘等。