【问题标题】:serialization problem in gwtgwt中的序列化问题
【发布时间】:2011-08-30 19:24:48
【问题描述】:

我已经读到了:

GWT serialization issue

但没有解决办法。

我的包裹是:

包 gwt.web 包 gwt.web.client; 等等……

我有包模型

我的班级“models.Word”在哪里

如您所见,该类不位于 int gwt.cleint,但它不应该存在,它不是客户端类。

这个类有默认构造函数,所以这不是问题。

我有例外:

服务方法'public abstract java.util.List gwt.web.client.WordService.getWords(java.lang.String)' 抛出了一个 意外异常: com.google.gwt.user.client.rpc.SerializationException:类型 'models.Word' 未包含在可以使用的类型集中 此 SerializationPolicy 或其 Class 对象无法序列化 被加载。出于安全目的,此类型不会被序列化。: 实例 = Word[null]

在我的 App.gwt.xml 中:

<!-- Specify the paths for translatable code                    -->
<source path='models'/>

所以这指向我的班级。所以,这也不应该是问题。

问题:如何处理?我需要使用我的模型类通过服务通过 ajax 传递它。

My Class 是可序列化的(实现该接口)。

这个类是我的代码的一部分。 RPC中使用的这个类:

@RemoteServiceRelativePath("wordServiceImpl")
public interface WordService extends RemoteService {
    public List<Word> getWords(String langCode);
}

【问题讨论】:

    标签: java gwt


    【解决方案1】:

    要记住的一个关键点是,GWT 会优化并且如果不需要,不会序列化所有类。

    如果您的类不是任何 RPC 调用的一部分(即 RPC 调用中使用的类没有此类对象作为数据成员),GWT 将不会序列化此类,因为它假定不需要它。

    您的代码是这种情况吗?在这种情况下,只需将此类的假数据成员添加到 RPC 中使用的类中

    【讨论】:

    • 这是我的代码。 RPC 中使用的此类:@RemoteServiceRelativePath("wordServiceImpl") public interface WordService extends RemoteService { public List getWords(String langCode); }
    • 我认为您应该尝试将此类的对象作为 RPC 调用中的虚拟参数,然后测试它是否序列化
    • 我发现这是一个非常愚蠢的重复我的实体作为客户端的虚拟对象(实际上是 ast TDO 对象)。这导致需要支持很多代码。如果我更改实体中的某些字段,我应该在虚拟对象中更改它。这不好。有趣的是人们如何处理这个问题的一般方法,他们如何使用 GWT 和传输对象..然后为此创建特殊协议?
    • 我找到了这里描述的解决方案:code.google.com/webtoolkit/articles/… - 使用吉利德。但我还没有尝试过。不过好像还不错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多