GWT编辑器:如何记录对字段和子编辑器的更改?(请求工厂?)
我有一个广泛使用编辑器框架的应用程序。现在我想添加一个新特性:如果用户编辑一个实体,我想记录所做的更改并将它们存储在一个单独的数据存储实体中。这需要知道字段是否已更改、字段名称及其更改为的值 这就是我想要实现的:GWT编辑器:如何记录对字段和子编辑器的更改?(请求工厂?),gwt,requestfactory,gwtp,gwt-editors,Gwt,Requestfactory,Gwtp,Gwt Editors,我有一个广泛使用编辑器框架的应用程序。现在我想添加一个新特性:如果用户编辑一个实体,我想记录所做的更改并将它们存储在一个单独的数据存储实体中。这需要知道字段是否已更改、字段名称及其更改为的值 这就是我想要实现的: 应用程序调用编辑(bean) 用户进行更改,调用flush()并将数据发送回服务器 在服务器处理程序中,bean的更改被发送到processChanges(列表路径),然后创建并存储“fieldfoo”更改为“bar”的记录,依此类推 将保存实体,覆盖现有实体 我使用GWTP,目前使用
processChanges(列表路径)
,然后创建并存储“fieldfoo”更改为“bar”的记录,依此类推我可能可以在客户端观察更改,但这似乎不是一个好主意。我相信您可以使用,类似于编辑器框架内部使用的
DirtCollector
访问者(查看PathCollector
了解如何在访问者中收集路径)
我会在调用edit()
之后访问层次结构以收集初始值(这已经由DirtCollector
内部完成,但无法访问其结果,而且它只收集叶值)。然后您可以调用
flush()
ans查看是否有错误,并可能验证您的对象以查看是否一切正常。然后再次访问层次结构以收集更改(与之前收集的初始值相对),以便将更改发送到服务器。我看不出这与GWT编辑器或GWT有100%的关系。听起来更像是数据库/数据存储的重组问题,例如保存实体的历史记录。我想你误解了我的问题。当我调用EditorDriver.flush()
时,重构模式将如何帮助我找出哪些字段的内容发生了更改?我正在重新保存同一个实体,而不是每次创建一个新副本,因此需要单独记录更改。谢谢Thomas。这似乎是一个简单的任务,所以我现在就不谈了。我将在不久的将来重构我所有的数据绑定代码,所以我可能会选择requestfactory,因为它看起来非常有用。我的答案根本没有链接到requestfactory,它只是使用编辑器框架。我明白,但是,与使用EditorVisitor
遍历树相比,使用RequestFactory
代理跟踪字段名称以及哪些字段已被编辑,这难道不更容易吗?我最初的评论应该是“这不是一项简单的任务”—Doh!这取决于你的限制。RequestFactory具有陡峭的学习曲线和相当多的约束;它显然不适合每一个用例。我认为访客方式可能比搬到工厂便宜。