【问题标题】:GWT-CellTable/Datagrid- BOUND_TO_SELECTION causing errorGWT-CellTable/Datagrid- BOUND_TO_SELECTION 导致错误
【发布时间】: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


【解决方案1】:

由于您没有提供代码,我不得不猜测。

您设置/隐藏省略号的方式会触发重绘表格。反过来,这会触发选择事件(选择相同的单元格)。一旦选择了一个单元格,它就会触发另一个表格重绘等。

【讨论】:

  • 是的,我完全理解没有代码你只能做这么多。但我感谢您迄今为止给我的所有帮助!但是,我不太确定它与省略号有关,因为在按列标题排序时我仍然会遇到相同的错误。错误似乎随机显示在不同的列上...包含列的省略号似乎不会影响列是否会出错。此外,由于省略号完全是 CSS,我不确定这将如何触发 java 中的表重绘,但我真的不知道。
  • 我最大的问题可能是 BOUND_TO_SELECTION 中的什么可能导致表格重绘?毕竟,这就是让这一切发生的原因。
  • 如果您在任何 HTML 元素上设置新样式,它会导致刷新。当您更改排序时,表格会重新绘制。但是,重绘本身并不会导致循环。某处有一段代码会因为重绘而触发选择事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多