6

使用 GWT 将 bean 序列化为字符串的最简单方法是什么?我不喜欢使用GWT.create()调用。

4

6 回答 6

4

免责声明: 在 URL 上序列化 bean 对 GWT 来说并不是一个好主意。我了解到,如果需要在 URL 上放置数据,应该尽可能少,并且只需要恢复页面状态所需的数据。看看 Gmail 如何使用它的历史令牌,你会发现它非常少。

有了这个免责声明:

对于我从事的 GWT 项目,我只是简单地写出由分隔符分隔的 bean 的值。在读回这些值时,我使用 String.split() 方法来获取一个数组。使用该数组,我将值分配回正确的 bean 属性。在代码中:

public class Sample {

    private int a;
    private boolean b;
    private String c;
    //getters and setters for fields not shown

    public String toHistoryToken(){
        return a+"/"+b+"/"+c;
    }
    public void fromHistoryToken(String token){
        String[] values=token.split("/");
        a=Integer.parseInt(values[0]);
        b=Boolean.parseBoolean(values[1]);
        c=values[2];
    }
}

对于更复杂的场景,您可能需要做更复杂的事情。例如,对于嵌套对象,您必须编写代码将值传递给子对象。

另外,请注意,您必须确保您使用的任何值都不包含分隔符。因此,如果您知道您的字符串可能包含“/”,那么您可能必须对它们执行 replace() 操作以转义任何嵌套分隔符。

于 2009-04-19T16:11:31.933 回答
1

我不确定我是否了解您最终要完成的工作。

如果你真的只是想来回发送字符串,你真的不需要做任何事情——你可以使用普通的 GWT RPC 机制免费获得。只需创建一个返回 a 的方法java.lang.String,创建随附的实现和 Async 接口,就完成了。

另一方面,如果你真的想发送一个 bean,只需确保它有一个零参数的构造函数并实现Serializableor IsSerializable

于 2009-04-13T14:55:34.277 回答
1

我能找到的最接近的是:

使用嵌入在 HTML 主机页面中的对象加快 GWT 启动

于 2009-04-20T05:24:42.590 回答
0

也许这就是你要找的东西?

与 GWT 一起使用的 Json <-> Java 序列化

扩大的视野:

使用 Json-lib 库:

http://json-lib.sourceforge.net/

你可以这样做(从 bean 到 json 字符串):

http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean

于 2009-04-13T14:44:30.603 回答
0

GWT 可能存在一些使事情复杂化的细微差别,但通常情况如下:

  • XML 数据绑定/映射库(如JAXBXStream)可以做到这一点
  • 使用 JSON,像Jackson这样的库可以进行灵活的全 bean 绑定,类似于 JAXB,但配置更少(如果这很重要,速度更快)。

应该管用。

于 2009-04-15T20:49:24.237 回答
0

最终,GWT 是在 JavaScript 中运行的(即使它是用 Java 编写的)。从这个意义上说,“java bean”不是您在客户端中容易找到的东西,但它们在服务器中(在 Java 中)运行良好。

如果您接受 bean 实际上只是一个无方法的对象,那么您使用它们的潜在意图是移动数据。在 JavaScript 中,JSON 也可以作为一个极其灵活的数据容器。在服务器端,可以使用 BeanUtils(以及一些遍历)将 Bean 数组转换为 JSON。JSON 可以在 GWT 中序列化为字符串,并且 GWT 有一个解析器将 JSON 转换回客户端的 JavaScript 对象。

这可能不是最简单的方法,但一旦你开始工作,它就会非常灵活。

于 2009-04-17T20:10:08.663 回答