为什么GWTP不允许Object(由我们创建)通过ActionHandler?

时间:2014-04-24 04:01:48

标签: gwt serialization gwtp

好的,这是情景。

我有:

myproject.client包中的

CustomerPresenter.java

myproject.client包中的

GetCustomer.java

myproject.client包中的

GetCustomerResult.java

myproject.shared包中的

Customer.java

myproject.server包中的

GetCustomerActionHandler.java

所有这些文件都是由eClipse自动生成的,除了我自己创建的Customer.java。

CustomerPresenter.java:用户可以将客户属性输入文本框&单击按钮,系统应搜索与提供的属性匹配的客户。

GetCustomer.java保留客户属性,例如setCustomerName & getCustomerNamesetEmail ..等等

GetCustomerResult.javasetCustomer(customer) & getCustomer(); // customer from shared package

GetCustomerActionHandler.java连接到Db& select name, email...然后将这些信息传递给客户。例如:

在GetCustomerActionHandler.java

@Override
public GetCustomerResult execute(GetCustomer action, ExecutionContext context)
            throws ActionException {
    String sql="select name, email... from Customer...";
    .....
    String name=dbResults.getString(1);
    Customer c =new Customer();
    c.setName(name);
    GetCustomerResult getCustomerResult=new GetCustomerResult();
    getCustomerResult.setCustomer(c);
    return getCustomerResult;

}

但是在跑完之后,我得到了这个错误:

Starting Jetty on port 8888
   [WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'myproject.shared.Customer' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = myproject.shared.Customer@31e4aa02
    at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:665)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
......

如果我们不在服务器级别将数据放入对象,那么我们必须将其放在客户端级别,但这会使代码变得麻烦。

也许我们可以让客户成为序列化或类似的......但我不知道这种技术。

为什么会这样?你知道怎么解决吗?

1 个答案:

答案 0 :(得分:2)

您的Customer课程必须实施IsSerializable,如下所示:

public class Customer implements IsSerializable {
   ...
}

如果仍然不起作用,请尝试

public class Customer implements IsSerializable, Serializable {
   ...
}

有关详细信息,请查看What is the purpose of the IsSerializable interface in GWT (regarding the RPC mechanism)