如果您使用 JPA 或其他类型的持久性,您可能有一种方法可以保存通过 ajax 发送给客户端的记录。
编辑:接口(interface)是用 GWT 完成的,所以所有的 ajax 调用都是经典的 java 方法(转换为等效的 javascript)
让我们以 Person 类为例,它是数据库中的一个实体。
Person 有四个字段:name, birthday, id, email
当您通过 ajax 从服务器加载一个人时,您通常会向客户端发送一个 Person 对象。
在您的人物编辑器中,您显示姓名、生日和电子邮件。编辑 Person 对象时,您可能希望显示 id。
有两种情况:
- save person : 只能改email 但可以显示id
- 创建人:可以更改电子邮件、姓名和生日
当你将刚刚编辑好的数据发送到服务器时,你是如何进行的?
我看到了几种方法:
- 发送一个 Person 对象。在这种情况下,您必须处理您持久保存的数据,而不仅仅是使您从客户端接收到的人员对象进入持久模式,因为黑客可以发送您可能不想更改的数据(并且您不能信任禁用这些的接口(interface)变化)。在这种情况下,也有几种方法:
- 使用两个函数(保存和创建),在服务器上创建一个新的 Person 对象(或者如果您在保存方法中,则通过 id 加载持久化实例)并将您想要的所有字段从客户端 Person 对象复制到持久化对象一个
- 使用一个函数 (saveOrCreate) 并检查 id 是否存在。它等同于将两个函数合并为一个带有大“if”的上述方法
- 将数据发送到服务器(电子邮件、生日、姓名、ID(在编辑的情况下))。当您这样做时,创建一个新的 Person 对象(或加载持久的对象)并将数据复制到这个持久的实例。
总而言之,您具有以下方法签名之一(仅用于编辑案例):
Person savePerson(Person person);
Person savePerson(String id, String email);
我看到了每种方法的优缺点。例如,第一个允许在不修改所有 savePerson 调用的情况下快速更改 Person 模型。但与第二种方法相比,它的可读性较差,无法了解真正保存的内容。
我不知道什么是最好的,以及您是否知道另一种方法。那么,你怎么做?
最佳答案
使用域对象进行数据传输总是很好的。在 GWT 中,您必须定义接口(interface)并标记 Rpc BeanProxies。作为项目发展的一部分,您发现需要向对象添加额外的字段。如果您使用使用数据属性而不是对象的接口(interface),您将不断更改它们,并且方法签名变得笨拙且不可读。
但是,某些人要求将持久域实体与业务域分开。在这种情况下,可以使用属性复制(apache commons-bean utils)。
关于java - 使用 GET 将数据对象从客户端传输到服务器以持久保存数据的方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121435/