【问题标题】:GWT Editors: How to record changes to fields and sub-editors? (RequestFactory?)GWT Editors:如何记录对字段和子编辑器的更改? (请求工厂?)
【发布时间】:2014-10-27 13:24:11
【问题描述】:

我有一个广泛使用编辑器框架的应用程序。现在我要添加一个新功能:如果用户编辑实体,我想记录所做的更改并将它们存储在单独的数据存储实体中。这需要知道字段是否已更改、字段名称以及更改为的值。

这是我想要实现的:

  1. 应用调用edit(bean);
  2. 用户进行更改,调用 flush() 并将数据发送回服务器。
  3. 在服务器处理程序中,来自 bean 的更改被发送到 processChanges(List<String> paths),然后创建并存储“field foo”更改为“bar”的记录,依此类推。
  4. 实体已保存,覆盖现有实体。

我使用 GWTP,目前使用 RPC 命令模式。我已经阅读了一些关于 RequestFactory 的内容,据我所知,它的主要好处之一是它只将称为“deltas”的更改字段发送回服务器以最小化有效负载,所以我想知道使用 RequestFactory 是否会更适合我的应用?

抱歉 - 我一直在阅读有关编辑器框架和 RequestFactory 的 GWT 文档和 Javadocs,但我仍然很困惑。 RequestFactoryEditorDriver.getPaths() 似乎这可能是我需要的,但非常感谢任何建议或指针。

我可能会在客户端观察变化,但这似乎是个坏主意。

【问题讨论】:

  • 我没有看到 100% 这与 GWT 编辑器或 GWT 有什么关系。听起来更像是对数据库/数据存储问题的重组,例如保存实体的历史记录。
  • 我想你误解了我的问题。当我致电EditorDriver.flush() 时,重组我的架构将如何帮助我找出哪些字段的内容发生了变化?我正在重新保存同一个实体,而不是每次都创建一个新副本,因此需要单独记录更改。

标签: gwt requestfactory gwtp gwt-editors


【解决方案1】:

我相信您可以使用EditorVisitor 来做到这一点,类似于编辑器框架内部使用的DirtCollector 访问者(查看PathCollector 了解如何收集访问者中的路径)。

我将首先访问层次结构以在调用 edit() 之后收集初始值(这已经由 DirtCollector 在内部完成,但无法访问其结果,它只收集 叶值无论如何)。
然后您可以致电flush() 并查看是否有错误,并可能验证您的对象以查看是否一切正常。然后您再次访问层次结构以收集更改(针对您之前收集的初始值),以便您可以将它们发送到服务器。

【讨论】:

  • 谢谢托马斯。看起来这是一个简单的任务,所以我现在要离开它。我很快就会重构我所有的数据绑定代码,所以也许我会去 requestfactory,因为它看起来真的很有用。
  • 我的答案与 RequestFactory 完全没有关联,它使用了编辑器框架。
  • 我明白这一点,但是使用RequestFactory 代理而不是使用EditorVisitor 自己遍历树,跟踪字段名称以及哪些字段已被编辑不是更容易吗?跨度>
  • 我最初的评论应该是“这不是一个简单的任务”——Doh!
  • 这取决于您的限制。 RequestFactory 有一个陡峭的学习曲线和相当多的限制;它显然不适合每个用例。我认为访问者方法可能比迁移到 RequestFactory 更便宜。
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多