好的,这是情景。
我有:
myproject.client包中的 CustomerPresenter.java
。
GetCustomer.java
。
GetCustomerResult.java
。
Customer.java
。
GetCustomerActionHandler.java
。
所有这些文件都是由eClipse自动生成的,除了我自己创建的Customer.java。
CustomerPresenter.java
:用户可以将客户属性输入文本框&单击按钮,系统应搜索与提供的属性匹配的客户。
GetCustomer.java
保留客户属性,例如setCustomerName & getCustomerName
,setEmail
..等等
GetCustomerResult.java
有setCustomer(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) ......
如果我们不在服务器级别将数据放入对象,那么我们必须将其放在客户端级别,但这会使代码变得麻烦。
也许我们可以让客户成为序列化或类似的......但我不知道这种技术。
为什么会这样?你知道怎么解决吗?
答案 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)。