在我的GWT應用程序,必須跟蹤到我的休眠對象所做的更改,所以我有這個簡單的POJO來修改傳送到服務器端,在那裏他們將被記錄:GWT RPC屬性空
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對象。 (:通過使用setFirstNameLog()
代替下面setFirstName()
例如):
跟蹤是通過使用記錄該變形例的特殊設置器方法來實現當ModifiedValueReference
對象到達經由GWT RPC服務器側
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;
}
}
,所述oldValue
和newValue
都是空的! 爲什麼?
這些字段在客戶端填充了字符串。在服務器端,它們不是空的,而是空的字符串。
也許一些更多的代碼會有所幫助。也許是實際的服務調用和服務器端的實現。 – enrybo
@enrybo感謝您的建議。由於該代碼正在工作,我在家裏做了一個示例GWT項目,試圖重現這個問題。我在家裏的代碼工作正常,所以我懷疑其他代碼在工作是造成這個問題。我們在工作中有休眠和吉利德,所以任何事情都可能導致這個問題。如果你願意,我可以發佈我現在寫的代碼。 – Churro
@enrybo,我想通了。我沒有'修改'的setter,導致它不會被服務器端的GWT RPC重建。 – Churro