GWT:将自定义小部件添加到单元格丢失自定义小部件的事件

2024-05-07

我们的要求是使用以下命令制作一个可编辑的网格CellTable在其单元格中包含自定义小部件。自定义小部件具有文本框和与文本框关联的搜索按钮。要将自定义小部件添加为单元格,请创建以下子类AbstractEditableCell类(由 GWT 提供)并已覆盖render() and onBrowserEvent()方法。

The render(Context context, String value, SafeHtmlBuilder sb)自定义小部件单元格的方法为小部件创建一个安全 html,并将此安全 html 渲染到单元格中。但我面临的问题是,自定义小部件已正确呈现,但它丢失了其关联事件。渲染方法如下:

if (viewData.isEditing()) {
    textBoxSelector.setText(text);
    OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml safeHtmlObj = new OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml(textBoxSelector.toString());
    sb.append(safeHtmlObj);
} else {
  // The user pressed enter, but view data still exists.
  sb.append(html);
}

如果我尝试将小部件添加到render()使用以下代码的方法,它不添加小部件。

    int left = parent.getAbsoluteLeft();
    int top = parent.getAbsoluteTop();
    String elementId = "ID" + left + top;
    try {
        parent.setId(elementId);
        // parent.removeFromParent();
        RootPanel.get(elementId).add(textBoxSelector);
    } catch (AssertionError error) {
        RootPanel.get(elementId).add(textBoxSelector);
    }

如果有人能指导我在中添加小部件,我将非常感激CellTable不会丢失相关事件。


GWT 的单元格与 GWT Widget 不兼容。这意味着您无法将 GWT 小部件放置在单元格内并使其仍然起作用。不过,单元格确实有替代的事件处理机制(如下所述)

原因是 Cell 更接近无状态渲染器。给定一个数据对象,Cell 将输出 HTML。单个 Cell 将被一遍又一遍地重用 - 为页面上的各种元素生成 HTML - 并且从不维护对其创建的任何 DOM 元素的引用。

在上面的示例中,您调用“someWidget.toString()”。这样做只会返回您的小部件的 HTML 表示形式,并且会丢失您的事件处理。

处理单元格中的事件

自定义单元的 GWT 开发指南 http://code.google.com/webtoolkit/doc/latest/DevGuideUiCustomCells.html(有一些额外的细节)

要处理单元格中的事件,您需要重写一个名为的单独方法onBrowserEvent。您还需要将您的单元配置为通过调用来接收特定事件的通知super('click', 'keydown')在您的构造函数中包含您有兴趣收听的事件列表。

由于单元格是无状态渲染器,因此 onBrowserEvent 将传递所单击的渲染元素的上下文以及单元格渲染的原始数据对象。然后,您可以根据需要应用更改或操作 DOM。

以下是取自上面链接的开发指南的示例:

@Override
public void onBrowserEvent(
    Context context,
    Element parent,
    String value,
    NativeEvent event,
    ValueUpdater<String> valueUpdater) {

  // Let AbstractCell handle the keydown event.
  super.onBrowserEvent(context, parent, value, event, valueUpdater);

  // Handle the click event.
  if ("click".equals(event.getType())) {
    // Ignore clicks that occur outside of the outermost element.
    EventTarget eventTarget = event.getEventTarget();
    if (parent.getFirstChildElement().isOrHasChild(Element.as(eventTarget))) {
      doAction(value, valueUpdater);
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GWT:将自定义小部件添加到单元格丢失自定义小部件的事件 的相关文章

  • Vaadin - GWT 错误“模块 xxx 可能需要重新编译

    我正在加大 Vaadin 的力度 每当我尝试运行演示应用程序时 都会收到此 javascript 警报 GWT module com vaadin terminal gwt DefaultWidgetSet may need to be r
  • TextField“更改”事件仅在模糊时触发

    通常 Change 事件将在 TextField 失去焦点 模糊 后触发 但我需要它在字段值发生变化时立即触发 而不需要失去对该字段的关注 KeyListener 不会删除它 因为该值可能来自条形码扫描仪等 有什么办法可以做到这一点吗 提前
  • gwt hibernate 程序中的异常

    我正在尝试制作一个简单的 GWT RPC Hibernate 程序 将用户添加到 MySQL 数据库 我正在使用 Eclipse EE 该应用程序已成功将用户添加到数据库 但在编译时引发异常 这是我的应用程序的例外情况和来源 例外 Exce
  • 如何清除gwt中的缓存?

    我怎样才能清除缓存gwt 或者有什么方法可以阻止浏览器保留缓存gwt 当您部署 GWT 应用程序时 避免代理和浏览器缓存 GWT 生成的 nocache js 文件非常重要 一种解决方案是实现一个 Servlet 过滤器 添加控制缓存行为的
  • gwt 谷歌应用引擎 HTTP 错误 404

    我在 Eclipse 中使用 google 应用程序引擎创建了一个新的 gwt 项目 但是当我运行该项目时 在浏览器中我收到以下消息 HTTP 错误 404 访问 Test html 时出现问题 原因 NOT FOUND 由码头提供动力 现
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • gwt 中的垂直居中

    如何使用垂直面板在 gwt 中垂直居中 或者请告诉我有什么方法可以进行垂直居中 如果你想直接使用VerticalPanel从代码中 您需要使用setVerticalAlignment HasVerticalAlignment ALIGN M
  • GWT GIN 现场级注入

    我们正在评估 GWT 项目中使用 GIN 的情况 并通过构造函数参数进行典型注入 取得了良好的结果 我们遇到的困难是现场级注入 这些字段最终总是为空 有没有人有一个很好的例子来说明如何使用 GIN 正确实现字段级注入 Update 这是一些
  • 将对象传递给 uibinder 中定义的小部件的构造函数

    我试图将我的应用程序的 EventBus 通过其构造函数传递给 UiBinder 中声明的小部件 我使用 UiConstructor 注释来标记接受 EventBus 的构造函数 但我不知道如何从 ui xml 代码中实际引用该对象 也就是
  • 如何将 GWT 与 Visual Studio 一起使用来创建 ASP.NET 网站?

    如何将 GWT 与 Visual Studio 一起使用来创建 ASP NET 网站 如果可能 GWT 可以与任何后端一起使用 只需做一些工作 它开箱即用 使用 servlet 容器 但您不需要保留此容器 容器中的关键项是加载GWT编译代码
  • 如何使用CellTable进行单行扩展?

    我正在尝试使用新的 GWT CellTable 小部件 但我的表格需要支持单行扩展 即行的左侧有一个 zippy 单击它时 该行应该扩展以提供更多详细信息 并且该行应该跨越所有列 是否可以使用 CellTable 来实现此目的 如何动态添加
  • 从 JSNI 调用 Java 方法

    我想调用Java方法test 来自 JSNI 变量successHandler 但是 我收到错误 ERROR Line 110 Missing qualifier on instance method com gw myProject cl
  • 如何使用 GWT 以编程方式禁用 html 缓存

    有没有办法使用 GWT 禁用浏览器中 html 页面的缓存 我宁愿避免在 html 页面的标题中使用插入 META HTTP EQUIV EXPIRES CONTENT 而是以编程方式执行 如果可能的话 如果这对于 GWT JavaScri
  • 无法取消 GWT 中的重复计时器

    我正在尝试在 GWT 中安排一个重复计时器 它将每一毫秒运行一次 轮询某个事件 如果发现满意 则执行某些操作并取消计时器 我尝试这样做 final Timer t new Timer public void run if condition
  • 为什么这个 GWT DockLayoutPanel 的对话框尺寸这么小?

    我使用 GWT 2 0 4 生成了一个新的 Web 应用程序项目 我将 onModuleLoad 代码替换为 public void onModuleLoad DockLayoutPanel dp new DockLayoutPanel U
  • GWT 的 RPC 与 AJAX 不同吗?

    与 AJAX 调用相比 GWT Google Web Toolkit 的 RPC 远程过程调用 用于从浏览器 javascript 到服务器的异步操作有何不同或相似 如果它们不同 有人可以帮助我理解它们有何不同吗 我还听说这个 RPC 实现
  • GWT RequestFactory 和多个请求

    有没有办法使用 RequestFactory 在单个请求中创建两个实体 我试过 EmployeeRequest request requestFactory employeeRequest EmployeeProxy newEmployee
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 为什么使用 GWT.create() 而不是 new?

    有什么区别GWT create SomeClass class and new SomeClass 为什么你会使用其中一种而不是另一种 GWT createGWT 编译器使用延迟绑定 延迟绑定是 GWT 编译器的一项功能 它的工作原理是在编

随机推荐