RequestFactoryEditorDriver 在刷新后获取编辑数据

2023-12-05

首先我有一个解决方案,但我并不认为它很优雅。所以,我正在寻找一种更清洁的方法来做到这一点。

我在视图面板中显示了 EntityProxy。视图面板是一个仅使用显示模式的RequestFactoryEditorDriver。用户单击数据元素并打开弹出编辑器来编辑 EntityProxy 的数据元素,其中的数据位比视图面板中显示的数据位多一些。当用户保存元素时,我需要视图面板来更新显示。

我遇到了一个问题,因为弹出编辑器流程的 RequestFactoryEditorDriver 不允许您访问已编辑的数据。驱动程序使用与您向服务器发送数据相同的传入上下文,但是从刷新返回的上下文仅允许Receiver<Void>即使您将其转换为在 edit() 调用中存储在编辑器驱动程序中的上下文类型。 [它似乎也没有发送 EntityProxyChanged 事件,所以我无法监听该事件并更新显示视图。 - 从头开始​​ - 我现在发现这个事件不适合这个用例]

我找到的解决方案是更改我的域对象持久性以返回新保存的实体。然后像这样创建弹出编辑器

editor.getSaveButtonClickHandler().addClickHandler(createSaveHandler(driver, editor));
                // initialize the Driver and edit the given text.
                driver.initialize(rf, editor);
                PlayerProfileCtx ctx = rf.playerProfile();
                ctx.persist().using(playerProfile).with(driver.getPaths())                      
                        .to(new Receiver<PlayerProfileProxy>(){
                    @Override
                    public void onSuccess(PlayerProfileProxy profile) {
                        editor.hide();
                        playerProfile = profile;
                        viewDriver.display(playerProfile);
                    }                               
                });
                driver.edit(playerProfile, ctx);
                editor.centerAndShow();

然后在保存处理程序中,我只需触发()从flush()获得的上下文。虽然这种方法有效,但似乎并不正确。 [看来我应该订阅显示视图中的entitychanged 事件并从那里更新实体和视图。 - 再次刮擦,原因与之前相同] 此外,这种方法保存了完整的实体,而不仅仅是更改的位,这将增加带宽使用。

我认为应该发生的是,当您刷新实体时,它应该“乐观地”更新实体的射频托管版本并触发实体代理更改事件。仅当保存中出现问题时才恢复实体。实际保存应该只发送更改的位。通过这种方式,不需要重新获取整个实体并通过线路发送完整的数据两次。

有更好的解决方案吗?


您似乎并没有真正了解 RF 的细节;另外,你的术语并不能真正帮助理解(冲洗与火)。

RF 中的代理是您检索服务器时服务器状态的快照。您可以对应用程序中其他位置的实体执行任何您想要的操作(通过其他代理),您的代理永远不会更改以反映这些修改。

An EntityProxyChange当服务器检测到它已更改时,事件将在客户端(对于服务器已知并已从客户端发送的实体)分派:其版本(由getVersion on the Locator)已更改,或已被删除(如isLive的方法Locator)。如果你不使用Locator,它将使用getVersion该实体的和isLive将被替换为find通过实体的 ID(由其返回)getId方法)并检查null(这也是默认实现isLive in the Locator).
就您而言,如果您没有看到EntityProxyChange正在调度,然后检查您是否正确更新了实体的版本。

最后,RF 总是将您的更改的差异发送到服务器(除了ValueProxy,在这种情况下 diff 将没有意义)。至于检索数据,默认情况下它不会检索链接的代理,除非您使用明确要求它们with;这与您可能发送的有关该实体的内容无关。

对于您的情况,要更新视图面板,你有3种可能性:

  • 从服务器检索代理(监听EntityProxyChange事件或弹出窗口发出明确信号后;你可以使用find的方法RequestContext与代理的stableId作为论据,以及适当的with以获得您需要的属性)。
    当您执行第二个 HTTP 请求时,效率有点低,但另一方面,它可以处理应用程序中其他位置的更改(它们会触发EntityProxyChange也有活动)
  • 在与保存更新的代理相同的 HTTP 请求中检索更新的代理:save请求上下文的方法返回保存的实体,或者调用find相同请求上下文中的方法batch the save and find一起在同一个 HTTP 请求中。
    这就是你所做的。它发送更改的差异并检索视图面板所需的属性。有人可能会说它的缺点是弹出窗口和视图面板紧密耦合,由您决定这是否是可接受的权衡。
  • 使用您在视图面板中编辑并发送到服务器的实体,无需通过网络获取额外数据。
    虽然这看起来更简单,但您将错过其他用户可能对实体所做的任何更改(只有服务器知道的更改)。

总而言之,我想我会采用当前的解决方案。不过,关于你的代码,我会launch带有代理和回调的弹出窗口,并将请求上下文和编辑编辑器驱动程序保留为弹出窗口的实现细节:您只需要在完成时回调视图面板,将更新的代理作为参数传递给回调。

关于术语的最后一句话:你flush一个编辑器驱动程序,用于将字段的值复制回对象/代理,并且(独立地,但在您的情况下顺序)您fire用于向服务器发送一批服务方法和代理更改的请求上下文。刷新编辑器驱动程序不会向服务器发送任何内容,这些是不同的操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RequestFactoryEditorDriver 在刷新后获取编辑数据 的相关文章

  • Google App Engine appcfg.py 显示每个命令的帮助消息

    我有 GWT 应用程序 部署在 GAE Java 上 我正在尝试使用 appcfg py 从 App Engine 数据存储区下载数据 我按照以下进行了所有设置http ikaisays com 2010 06 10 using the b
  • 如何覆盖 GIN 中的绑定

    我找到了 Guice 的答案重写 Guice 中的绑定 https stackoverflow com q 483087 929804但不知道如何在 GWT 中对 GIN 执行同样的操作 提前致谢 据我所知 不支持 回答您的评论 如果您运行
  • 如何使用 Errai 将 GWT 与 JAX-RS/RESTEasy 服务器集成?

    我想从 GWT 客户端应用程序调用使用 RESTEasy 和 JAX RS 创建的 REST 服务 使用 Errai 为服务器和客户端使用单一代码库的最佳流程是什么 我们都喜欢休息 它与供应商 平台和语言无关 调试 实施和访问都很简单 它为
  • GWT Dev 模式和外部服务器出现间歇性序列化异常

    我有一个 GWT 应用程序 它在开发模式下与 GWT 的嵌入式码头服务器完美运行 但是 我需要转向使用外部码头服务器 出于各种原因 我遵循了 GWT 文档编译与调试 http www gwtproject org doc latest De
  • GWT ScrollPanel 未显示完整内容

    我使用 AbsolutPanel 作为主面板 我将另一个 AbsolutPanel 作为标题添加到主面板 现在我将 ScrollPanel 添加到主面板 ScrollPanel 在另一个面板上包含 30 个按钮 滚动时最后一个按钮未完全显示
  • vaadin gwt 编译器错误未知参数:-war

    我的 vaadin 项目有问题 由于我对 vaadin 相当陌生 所以我不确定如何解决它 我想重新编译我的小部件集 但即使在自定义 Eclipse 之后 我也会收到相同的错误消息 首先它通过命令行执行编译器 接下来它告诉我小部件集是从某个类
  • 在 GWT 中创建流体面板来填充页面?

    我希望 GWT 中的面板能够填充页面 而无需实际设置大小 有没有办法做到这一点 目前我有以下内容 public class Main implements EntryPoint public void onModuleLoad Horizo
  • GWT获取应用程序的路径

    我有一个 GWT 应用程序 当我在运行应用程序后部署本地主页时 其主页为 localhost 8888 myapp html 但当我们将其部署到服务器时 在应用程序运行后其主页为 107 20 239 198 8080 myapp myap
  • GWT CellTable 以编程方式选择 CheckBoxCell

    我有一个带有 CheckBoxCell 列的 cellTable 我想做的是在单元格表之外有一组按钮 让用户自动检查 取消检查一组不同的元素 例如检查所有 取消检查所有 但我想要更复杂的规则 我不明白的是如何访问该元素 我想通过行 列值 并
  • GSON反序列化:如何知道对象?

    我尝试使用 gson 库来反序列化发送给我的对象流 在我见过的所有示例中 当调用 fromJson 方法时 我们已经知道我们期望拥有什么类型的对象 就我而言 我收到不同对象的流 我想知道在反序列化对象之前了解对象类的最佳方法 A B B1
  • GWT:在另一个模块内调用RPC服务

    我有一个模块B 它继承了模块A 当我从A内部调用RPC服务时 它们工作正常 但是当我在B中调用A的服务时 RPC调用总是失败 我错过了什么吗 预先感谢您的任何帮助 我在这里找到了我的问题的答案 http blog cloudglow com
  • java.lang.ClassNotFoundException:com.google.gwt.user.client.rpc.RemoteService

    在 Tomcat 6 中部署 war 文件时出现以下异常 java lang ClassNotFoundException com google gwt user client rpc RemoteService 所以我尝试通过 webAp
  • 运行 GWT 的“MobileWebApp”示例时出现“HTTP 错误:500 无领域”

    我正在尝试运行 GWT 2 4 示例应用程序 MobileWebApp 当我尝试通过 Eclipse 在开发模式下运行应用程序时 出现 500 No Realm 错误 我知道这是一个身份验证问题 我不熟悉 Google App Engine
  • 让浏览器在登录
    中保存用户名/密码值?

    我有一个 GWT 应用程序 需要一个用户登录表单 我想让浏览器保存用户的用户名和密码 我相信我需要为此使用一种 常规 形式 不是由 GWT 生成的形式 所以我做了一个简单的表格
  • GWT 和身份验证

    保护 GWT Tomcat 应用程序执行身份验证和授权的最佳策略是什么 有两种基本策略 确保入口点安全 确保远程服务的安全 确保入口点安全 最简单的方法是使用常规 Web 应用程序安全工具限制对 GWT 生成的 html js 文件的访问
  • 阐明 GWT RequestFactory 和 RequestContext 的工作原理

    我正在尝试将 RequestFactory 和编辑器框架实现到我的应用程序中 即使在研究了论坛 Google 开发者论坛和其他论坛之后 我仍然发现 关于将 RequestContext 与 RequestFactory 一起使用 我仍然不明
  • 如何使用 GWT 检测操作系统?

    Basically what I want to know is to find out if my GWT application is running on a MacOS or any other operating system t
  • Jackson:无法反序列化 START_OBJECT 令牌中的 Number 实例

    我的 GWT 服务返回LinkedList
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • GWT 2 CssResource 如何

    我有一个 GWT 1 7 应用程序 我想将其升级到 GWT 2 Milestone 2 该应用程序使用 2 个大的外部 CSS 文件 在 GWT 1 7 中 我有一个公共文件夹 并将 CSS 文件放入该文件夹中 我的应用程序编译并运行良好

随机推荐

  • 将文件作为命令行参数传递

    我的程序应该从命令行读取加密文件 但我不知道如何传递命令行参数 这些是说明 移位密码是一种非常基本的密码算法 其中通过用字母表中后面固定数量的字符 即移位值 的字符替换明文中的每个字符来执行加密 例如 如果我们的移位值为2 那么明文白菜就变
  • 这是桌子吗? [复制]

    这个问题在这里已经有答案了 Web 开发的一句经典格言是 仅对表格数据使用表格 这源于过去 当时桌子被滥用于所有可以想象的布局任务 虽然我也尽可能坚持这条规则 但有时如果没有表格 我就无法解决一些布局任务 或者跨越 表格数据 和 非表格数据
  • jQuery的.on()方法与submit事件结合

    我有一个问题 on 我有多个表单元素 带有class remember 我还添加了另一个form remember使用 AJAX 所以 我希望它处理提交事件 例如 form remember on submit function 但使用 A
  • 使用当前行作为条件的 Pandas 累积和

    我有一个相当大的数据集 约有 200 万条记录 每条记录都有开始时间和结束时间 我想在每条记录中插入一个字段来计算表中有多少条记录 其中 开始时间小于或等于 本行 的开始时间 AND 结束时间大于 此行 的开始时间 因此 基本上每个记录最终
  • 在其持有页面的代码后面处理用户控件的事件

    我正在寻找以下情况的解决方案 在我的应用程序中 我有一个页面 例如 page1 我在 page1 中放置了一个用户控件 我的要求是我需要获取 page1 代码后面的用户控件中使用的按钮的单击事件 我如何在 Windows Phone sil
  • 如何确定 VB.NET ListView 是否向用户显示垂直滚动条

    我觉得这应该很简单 但我似乎不知道如何做到这一点 我有一个列表视图控件 我只想能够确定是否向用户显示垂直滚动条 我已经尝试了以下链接中的解决方案 http www pcreview co uk forums detect presence
  • 如何将枚举值传递给构造函数

    protected enum Category Action Fiction Drama Romance SciFi Poems Kids 我已经创建了这个enum类型 现在我必须为我的类创建一个构造函数 public Book Strin
  • 计算不具有连续元素的子集总数

    我正在尝试用组合学和子集计数来解决相当复杂的问题 首先 假设我们给出了集合 A 1 2 3 N 其中 N Example 假设 N 3 A 1 2 3 总共有 2 3 个子集 但我们不想计算子集 1 2 2 3 和 1 2 3 因此 对于这
  • blazor 项目中的自定义 AuthenticationStateProvider 在服务器端不起作用

    Hi all 我正在尝试在 Blazor WebAssembly 应用程序中创建自定义身份验证模式 这是工作室创建 3 个项目的地方 客户端 服务器 共享 想法是避免 IS4 auth 并让我的 oun 内部 用户用于测试目的 并了解 au
  • 屏幕锁定时 navigator.geolocation.getCurrentPosition()

    我有一个应用程序 在旅行模式下会不断轮询位置 我的问题是 一旦屏幕锁定 应用程序就无法再从手机访问地理位置 我已经设法找到这个插件 但它需要我购买它才能在 Android 中工作 http shop transistorsoft com p
  • Android Studio 中长包名构建错误

    我的应用程序的包名称很长 app running com voice and service song backup audio run inthe background 这是一个 B2B 项目 我现在无法减少它们的包名称 因为它已经修复了
  • YUV 颜色空间中的皮肤检测?

    我可以使用一组规则执行皮肤检测 例如 x1 简短的答案是yes 你可以 然而 亮度 Y 实际上是不相关的 这是色度 CbCr 或 UV 很重要 该领域被引用最多的论文之一是this one 未压缩的 PS 文件 我已经实现了它并且看起来效果
  • 从音频(或视频)文件生成波形?

    我试图了解如何从音频 或视频 文件生成波形以显示给用户 我已经在谷歌上搜索了一段时间 无法确定在 Qt 中如果不使用类似的东西是否可以做到这一点FFmpeg 我已经看过所有这些课程 QMediaPlayer QMedia内容 QMedia资
  • postgresql: \copy 方法输入有效条目并丢弃异常

    当输入以下命令时 copy mmcompany from
  • servlet 容器是否应该为每个传入请求创建新的 javax.servlet.http.HttpServlet 实例?

    我有课public class GAE SERVLETREQUESTServlet extends HttpServlet 不确定规范中关于 HTTPServlet 回收的内容 servlet 容器是否应该在每个传入请求上创建此类的新实例
  • 在 Angular2 中动态更新 [已检查]

    组件A ts Input array
  • Android IME:显示自定义弹出对话框(如 Swype 键盘),可以在 TextView 中输入文本

    我想知道如何创建一个自定义弹出窗口 如下面的屏幕截图中的那样 借自 Swype 键盘 其中我可以有几个按钮 每个按钮都向当前 连接 提交一个字符串TextView via a 输入连接 请注意 这是一输入法服务并且不是一个普通的Activi
  • 我可以在导航抽屉布局中添加图像标题吗

    我怎样才能像这样将图像标题添加到我的导航抽屉布局中 这是我的代码 MainActivity java package com webileapps navdrawer import android app AlarmManager impo
  • 如何在 Android 中保存和恢复 ExpandableListView 的状态?

    是否可以在 Android 中保存和恢复 ExpandableListView 的状态 哪些项目折叠 哪些不折叠 如果可以的话 我该怎么做 我可以在 onPause onResume 中访问 ExpandableListView 以及如何访
  • RequestFactoryEditorDriver 在刷新后获取编辑数据

    首先我有一个解决方案 但我并不认为它很优雅 所以 我正在寻找一种更清洁的方法来做到这一点 我在视图面板中显示了 EntityProxy 视图面板是一个仅使用显示模式的RequestFactoryEditorDriver 用户单击数据元素并打