GWT RequestFactory:如何从 stableId() 获取持久 id?

2023-12-21

I use Long我的实体中的 ids 不仅将它们存储在数据存储中,而且还引用其他实体。现在,我使用 RequestFactory 在客户端上 create() 对象并保留它们,但我需要一种方法来找出服务器生成的 id。

这是我发现的一种需要两次旅行的方法:

final OrganizationProxy proxy = context.create(OrganizationProxy.class);
context.persist().using(proxy).fire(new Receiver<Void>(){

    public void onSuccess(Void response)
    {
        requestFactory.find(proxy.stableId()).fire(new Receiver<OrganizationProxy>()
        {
            public void onSuccess(OrganizationProxy response)
            {
                //hey, now response has the server-generated id in it, along with any other values the server populated
            }
        });
    }
});

但好像有must是一种无需第二趟即可获取持久 id 的方法。看起来 requestFactory.find() 首先需要持久 id 才能工作。

如何在不向服务器发出第二次请求的情况下获取持久 ID?

=======更新=======

我终于想到了(在tbroyer之后;)) 我可以退回Long来自 RequestContext 中的 persist() 方法的 id。这不会从EntityProxyId,但它确实让我在单个请求中获得了新对象的持久 ID。

我将保留这个问题 - 我仍然对从 EntityProxyId 中获取持久 id 感兴趣。


您可以通过调用获取 EntityProxyId 的字符串表示形式RequestFactory.getHistoryToken() http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/requestfactory/shared/RequestFactory.html#getHistoryToken%28com.google.gwt.requestfactory.shared.EntityProxyId%29。这可以转换回EntityProxyId通过致电RequestFactory.getProxyId() http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/requestfactory/shared/RequestFactory.html#getProxyId%28java.lang.String%29.

用 RequestFactory 的话说,新创建的实体的 id 是“短暂的”。临时 id 仅在实例内有效RequestFactory创造了RequestContext用于创建EntityProxy。当。。。的时候RequestContext被触发并且所有方法调用都已被服务器处理,SimpleRequestProcessor将检查有效负载的临时对象,如果它们已被持久化,则生成的有效负载将使用从返回的值更新客户端的状态getId() method.

对象的同一性和平等性EntityProxyId当它从短暂状态切换到持久状态时不会改变,但其关联的历史令牌会改变:

OrganizationProxy proxy = context.create(OrganizationProxy.class);
final EntityProxyId<?> id = proxy.stable();
String ephemeralString = factory.getHistoryToken(id);
context.persist().using(proxy).fire(new Receiver<Void>() {
  public void onSuccess(Void response) {
    String persistedString = factory.getHistoryToken(id);
    assert !ephemeralString.equals(persistedString);
    assert factory.getProxyId(ephemeral) == factory.getProxyId(persistedString);

    MyRequestFactory otherFactory = GWT.create(MyRequestFactory.class);
    assert factory.getProxyId(ephemeral) != otherFactory.getProxyId(ephemeral);
    // Throws IllegalArgumentException
    otherFactory.find(otherFactory.getProxyId(ephemeral));
  }
});

在上面的演示中,一旦你有了persistedString,您可以将值存储在 cookie 或其他客户端持久性机制中,并在稍后重新创建 id 以便在调用时使用RequestFactory.find()。第二个和第三个断言展示了临时 id 的“范围”。短暂和持久形式可以与RequestFactory创建了该对象。如果临时 ID 与新创建的实例一起使用RequestFactory(如果临时 ID 被标记为书签,则会发生这种情况History令牌),你会得到一个EntityProxyId,但它实际上不能用于任何有用的目的。

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

GWT RequestFactory:如何从 stableId() 获取持久 id? 的相关文章

随机推荐

  • 想要有效地克服 Boost.Interprocess 共享内存中映射中关键类型之间的不匹配

    我正在使用 Boost Interprocess 在共享内存中创建一个映射 在本示例中从字符串到字符串 编译器似乎想强迫我在从映射检索期间在 托管段只是为了 不必要地 包含查询项 我希望能够 通过将映射的键与非共享内存中已有的实例进行匹配
  • 奥里利亚的全球职能

    我试图弄清楚如何在 Aurelia 中存储类似 全局 的函数 我已经按照这个教程 http blog durandal io 2015 04 24 aurelia custom elements and content selectors
  • 使用 Typescript 从 switch case 返回进行类型推断

    函数的类型 type fn01 name string gt void type fn02 age string gt void type fn03 description number gt void 我有这样一个案例 type Opti
  • 检测二维图中的倾角

    我需要自动检测二维图中的倾角 如下图中用红色圆圈标记的区域 我只对 主要 倾角感兴趣 这意味着倾角必须在 x 轴上跨越最小长度 倾角的数量是未知的 即不同的地块将包含不同数量的倾角 有任何想法吗 Update 根据要求 这里是示例数据 以及
  • 通过单元测试访问 Symfony 2 容器?

    如何在单元测试中访问 Symfony 2 容器 我的图书馆需要它 所以它是必不可少的 测试类扩展 PHPUnit Framework TestCase所以没有容器 Symfony 现已内置支持 看http symfony com doc m
  • Web应用程序访问用户的文件系统

    我正在为我的客户创建一个网络应用程序 该应用程序将安装在公司网络内的专用服务器上 他想在网页上查看他的本地文件列表 来自他的本地 PC 他的意思是任何访问者都可以从某个文件夹中看到他的本地文件列表 I knowWeb 应用程序无法访问访问者
  • React-select:如何在选项中显示 HTML

    我想知道react select是否可以在渲染选项中显示html 例如 如果获取的 ajax 选项有 b text b 我希望在下拉菜单中看到粗体文本 而不是看到 b text b 我阅读了文档 但没有找到任何选项 谢谢 我实现了上述解决方
  • 什么是 DOM 元素?

    以下语句中 DOM 元素的含义是什么 声明 1 https stackoverflow com questions 1065435 can a css class inherit one or more other classes 1065
  • 如何使用 W3C EBNF-Notation 并生成解析器生成器?

    在整个 RDF 规范中 EBNF NOTATION XML 规范用于指定文档的语法 所以我想知道如何使用 Antlr bison yacc 也许这些工具中的一些标志我不知道如何搜索 或者我还不知道的其他工具 来使用这些规范并生成解析器供我在
  • 如何记录 QApplication 未捕获的异常?

    我应该在哪里使用 except 块来记录异常QApplication 这似乎不起作用 app QtGui QApplication sys argv MainWindow MainWindow MainWindow show try eve
  • 查看文件路径是否在目录内

    如何检查不一定存在的文件的路径是否指向特定目录内的位置 说我有一个方法 bool IsInside string path string folder 然后 如果我这样称呼它 IsInside C Users Dude Hi C Users
  • VIsual Studio 2010,轻松最大化/最小化编辑器?

    有没有一种简单的方法可以最大化and最小化 恢复 Visual Studio 中的编辑器 为了演示 我正在寻找 Eclipse 具有的功能 正常布局 点击一个组合键 你就会得到这个 这看起来有点像 VS2010 中的 Windows gt
  • Python Plotly - 多个下拉图,每个下拉图都有子图

    Problem 我正在尝试结合两个 Python Plotly 功能 其中之一是下拉菜单 用户可以在其中切换绘图 链接到示例 https plot ly python dropdowns 另一个特点是次要情节 我的尝试 我有使用下拉菜单的工
  • 为 log4net 设置动态连接字符串

    我正在使用 log4net 并且我想在 log4net 配置中引用一个连接字符串 因为 Config connectionStrings config 中的连接字符串将是来自用户的动态输入 这是我正在尝试做的事情
  • 如何在不打开 Whatsapp 应用程序的情况下向 Whatsapp 发送消息到指定号码

    我想将消息发送到 Whatsapp 指定号码 而无需单击按钮打开 Whatsapp 应用程序 提前致谢 None
  • mysql加载数据本地infile

    我正在尝试使用下面的代码使用 LOAD DATA LOCAL INFILE 将数据加载到 mysql 表中 Mysql LOAD DATA INFILE var www vhosts domain com httpdocs test1 cs
  • 有人可以帮我编译 PHP runkit DLL 扩展吗?

    我放弃 我问过这个问题 https stackoverflow com questions 4667333 where can i get runkit dll extensions for php 5 3前一段时间 但我又陷入了这个问题
  • JavaCard 中的类字节到底是什么?

    我已经开始使用 JavaCards 并试图掌握 CLA 字节的含义 如果要读RFC 5 4 1 类字节 http www cardwerk com smartcards smartcard standard ISO7816 4 5 basi
  • Android studio - 部署发布 apk 而不是调试

    Android Studio 中的运行配置仅允许您部署默认 调试 APK 但我已经通过从 Android Studio 中运行 gradle assembleDebug 作为外部工具 构建了一个发布 APK 并且希望改为部署它 但似乎您无法
  • GWT RequestFactory:如何从 stableId() 获取持久 id?

    I use Long我的实体中的 ids 不仅将它们存储在数据存储中 而且还引用其他实体 现在 我使用 RequestFactory 在客户端上 create 对象并保留它们 但我需要一种方法来找出服务器生成的 id 这是我发现的一种需要两