【发布时间】:2010-10-18 08:25:45
【问题描述】:
使用 GWT 将 bean 序列化为字符串的最简单方法是什么?我不喜欢使用 GWT.create() 调用。
【问题讨论】:
-
你说的是什么字符串? “property=value”对的列表?
-
任何类型的字符串,只要能与原始实例来回转换即可。
标签: java serialization gwt javabeans
使用 GWT 将 bean 序列化为字符串的最简单方法是什么?我不喜欢使用 GWT.create() 调用。
【问题讨论】:
标签: java serialization gwt javabeans
免责声明: 在 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() 操作以转义任何嵌套分隔符。
【讨论】:
我不确定我是否理解您最终想要完成的任务。
如果你真的只是想来回发送字符串,你真的不需要做任何事情——你可以使用普通的 GWT RPC 机制免费获得。只需创建一个返回 java.lang.String 的方法,创建随附的实现和 Async 接口,就完成了。
另一方面,如果您真的想发送一个 bean,只需确保它具有零参数构造函数并实现 Serializable 或 IsSerializable。
【讨论】:
【讨论】:
也许这就是你要找的东西?
Json <-> Java serialization that works with GWT
加长版:
使用 Json-lib 库:
http://json-lib.sourceforge.net/
你可以这样做(从 bean 到 json 字符串):
http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean
【讨论】:
最终,GWT 是在 JavaScript 中运行的(即使它是用 Java 编写的)。从这个意义上说,“java bean”不是您在客户端中容易找到的东西,但它们在服务器中(在 Java 中)可以正常工作。
如果您接受 bean 实际上只是一个无方法的对象,那么您使用它们的潜在意图是移动数据。在 JavaScript 中,JSON 也可以作为一个极其灵活的数据容器。在服务器端,可以使用 BeanUtils(以及一些遍历)将 Bean 数组转换为 JSON。 JSON 可以在 GWT 中序列化为字符串,并且 GWT 有一个解析器将 JSON 转换回客户端的 JavaScript 对象。
这可能不是最简单的方法,但是一旦你开始使用它就会非常灵活。
【讨论】: