GWT RPC属性为空

时间:2013-10-19 01:36:38

标签: gwt serialization gwt-rpc

在我的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;
    }

}

属性oldValuenewValue属于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到达服务器端时,oldValuenewValue为空!的为什么吗

这些字段在客户端充满了字符串。在服务器端,它们不是null,而是空字符串。

1 个答案:

答案 0 :(得分:1)

问题是我的modifications类中的Person地图没有setter方法(例如:A setModifications(Map<String, ModifiedValueReference>)方法)。

因此,当通过RPC方法保存Person对象时,GWT RPC无法在服务器端重建地图。