在我的GWT应用程序中,必须跟踪对我的hibernate对象所做的更改,所以我有这个简单的POJO将修改转移到服务器端,它们将被记录在哪里:
public class ModifiedValueReference implements Serializable {
private static final long serialVersionUID = 6144012539285913980L;
private Serializable oldValue;
private Serializable newValue;
public ModifiedValueReference() {
super();
}
public ModifiedValueReference(Serializable oldValue, Serializable newValue) {
this();
setOldValue(oldValue);
setNewValue(newValue);
}
public Serializable getOldValue() {
return oldValue;
}
public void setOldValue(Serializable oldValue) {
this.oldValue = oldValue;
}
public Serializable getNewValue() {
return newValue;
}
public void setNewValue(Serializable newValue) {
this.newValue = newValue;
}
}
属性oldValue
和newValue
属于Serializable
类型,因此可以存储我的整数,字符串,日期和布尔值,以及其他几个Hibernate对象。
通过使用记录修改的特殊setter方法来实现跟踪(例如:使用setFirstNameLog()
代替下面的setFirstName()
):
public class Person {
private String firstname;
private Map<String, ModifiedValueReference> modifications =
new HashMap<String, ModifiedValueReference>(15);
public void addModification(String key, Serializable oldValue, Serializable newValue) {
if (key != null && !key.isEmpty()) {
modifications.put(key,
new ModifiedValueReference(oldValue, newValue));
}
}
public void setFirstnameLog(String firstname) {
addModification("First Name", getFirstname(), firstname);
setFirstname(firstname);
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getFirstname() {
return this.firstname;
}
}
当ModifiedValueReference
对象通过GWT RPC到达服务器端时,oldValue
和newValue
为空!的为什么吗
这些字段在客户端充满了字符串。在服务器端,它们不是null,而是空字符串。
答案 0 :(得分:1)
问题是我的modifications
类中的Person
地图没有setter方法(例如:A setModifications(Map<String, ModifiedValueReference>)
方法)。
因此,当通过RPC方法保存Person
对象时,GWT RPC无法在服务器端重建地图。