【发布时间】:2014-03-24 20:41:05
【问题描述】:
我创建了一个 GWT DataGrid(本质上就像一个单元格表)并且遇到了一个非常奇怪的错误。
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.
我在网上搜了很少的关于这个错误的信息,而且完全不影响前端,实际上是完美的。然而,当特定情况发生时,它仍然会在 Eclipse 中出错。
如何重现错误:
-选择特定过滤器(无法确定为什么它不会对每个列过滤器始终出错)
- 选择包含用 (...) 隐藏的数据的单元格,然后键入左或右键盘箭头。 CSS 的工作原理是当用户将鼠标悬停在单元格上时,行高会扩展并显示所有文本。)
导致/修复错误的原因:
错误似乎来自代码行:
myDataTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELCTION);
当我将此行注释掉时,错误不再发生。问题是不需要该功能,因为键盘选择与鼠标选择是分开的,并且存在整个“3 活动状态”问题。
关于我的代码:
我正在使用:
-SingleSelectionModel
-DoubleClick DOM 处理程序
-SelectionChangeEvent.Handler(即使注释掉,错误仍然显示)
更新 更多信息:
当我在调试器中进行跟踪时,它只会不断调用 onSelectionChange 5 次,然后出错。然后,就像我说的,如果我删除 SelectionChange 处理程序,它不会在我的文件中遇到任何断点,但会再次转到 GWT 文件 HasDataPresenter.Class 并继续运行,直到它最终出现错误(循环样式)。
此外,如果我首先选择一个没有省略号 (...) 的单元格,然后将箭头放在有省略号的单元格上,我不会收到错误消息。只有当我最初选择一个带有 (...) 和箭头的单元格时,它才会出错。
【问题讨论】:
-
你在 onSelectionChange() 中做了什么?为什么需要 DoubleClick 处理程序?
-
onSelectionChange 和 doubleclickhandler 调用相同的本地方法。此方法从 URL 栏和所选行检索参数,并将使用这些参数重定向到子页面。原因是我们希望某些页面在单击数据网格行 1 次时发生此重定向,而其他页面则发生两次。
-
我还用更多信息更新了我的问题,请参阅问题底部。
标签: java gwt datagrid selection gwt-celltable