Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EXT GWT BaseModel需要DTO参考?_Gwt_Gwt Rpc_Gwt2_Gxt - Fatal编程技术网

EXT GWT BaseModel需要DTO参考?

EXT GWT BaseModel需要DTO参考?,gwt,gwt-rpc,gwt2,gxt,Gwt,Gwt Rpc,Gwt2,Gxt,我对GWT很陌生。 我正在使用extgwt小部件 我在我的办公室代码里找到了很多地方 class A extends BaseModel{ private UserAccountDetailsDto userAccountDetailsDto = null; //SETTER & GETTER IN BASEMODEL WAY } 此外,DTO引用未使用 public class UserAccountDetailsDto implements Serializable{

我对GWT很陌生。 我正在使用extgwt小部件

我在我的办公室代码里找到了很多地方

class A extends BaseModel{

 private UserAccountDetailsDto userAccountDetailsDto = null;

 //SETTER & GETTER IN BASEMODEL WAY
}
此外,DTO引用未使用

public class UserAccountDetailsDto implements Serializable{

    private Long userId=null;
    private String userName=null;
    private String userAccount=null;
    private String userPermissions=null;

        //NORMAL SETTER & GETTER
}
现在,我可以从GWT服务器端代码中获得结果,一切正常,但是当我在类A中注释DTO引用时,我没有得到任何结果

请给我解释一下这个需要


谢谢

问题出在GXT
BaseModel
和GWT-RPC序列化的实现中。 BaseModel基于特殊的GXT映射RpcMap。这个映射定义了特殊的序列化规则,这让我们避免RPC类型爆炸,但作为副作用,只有一些存储在映射中的简单类型将被序列化。例如,您可以将任何类型放入映射中,但如果您对其进行序列化/反序列化,则只会出现Integer、String、Double、Byte、Float和Short类型的值(以及此类型的数组)。因此,在BaseModel中引用DTO的含义是告诉GWT-RPC这种类型也必须序列化

详细说明

GWT-RPC基本上是这样工作的:

为服务定义接口时,GWT-RPC将分析参数/返回类型中使用的所有类,以创建序列化器/反序列化器。如果您从服务返回类似于
Map
的内容,GWT-RPC将必须为实现Map和Serializable接口的每个类创建序列化程序,但它也将为实现Serializable接口的每个类生成序列化程序。最后,这是一个非常糟糕的情况,因为编译的js文件的大小将非常大。这种情况称为GWT-RPC型爆炸


因此,在
BaseModel
中,所有值都存储在
RpcMap
中。而且
RpcMap
具有自定义编写的序列化程序(
RpcMap\u CustomFieldSerializer
如果您对如何创建这些东西感兴趣,可以查看它的代码),因此它不会导致上述问题。但由于它有自定义序列化程序,GWT不知道哪个自定义类放在
RpcMap
中,因此它不会为它们生成序列化程序。因此,当您在
BaseModel
类中放入一些字段时,gwt知道它可能需要能够序列化此类,因此它将生成此类所需的所有内容。

问题在于GXT
BaseModel
和gwt-RPC序列化的实现中。 BaseModel基于特殊的GXT映射RpcMap。这个映射定义了特殊的序列化规则,这让我们避免RPC类型爆炸,但作为副作用,只有一些存储在映射中的简单类型将被序列化。例如,您可以将任何类型放入映射中,但如果您对其进行序列化/反序列化,则只会出现Integer、String、Double、Byte、Float和Short类型的值(以及此类型的数组)。因此,在BaseModel中引用DTO的含义是告诉GWT-RPC这种类型也必须序列化

详细说明

GWT-RPC基本上是这样工作的:

为服务定义接口时,GWT-RPC将分析参数/返回类型中使用的所有类,以创建序列化器/反序列化器。如果您从服务返回类似于
Map
的内容,GWT-RPC将必须为实现Map和Serializable接口的每个类创建序列化程序,但它也将为实现Serializable接口的每个类生成序列化程序。最后,这是一个非常糟糕的情况,因为编译的js文件的大小将非常大。这种情况称为GWT-RPC型爆炸


因此,在
BaseModel
中,所有值都存储在
RpcMap
中。而且
RpcMap
具有自定义编写的序列化程序(
RpcMap\u CustomFieldSerializer
如果您对如何创建这些东西感兴趣,可以查看它的代码),因此它不会导致上述问题。但由于它有自定义序列化程序,GWT不知道哪个自定义类放在
RpcMap
中,因此它不会为它们生成序列化程序。因此,当您在
BaseModel
类中放入一些字段时,gwt知道它可能需要序列化该类,因此它将生成该类所需的所有内容。

使用BaseModel将GXT2应用程序代码移植到GXT3模型是一项艰巨的任务。它将或多或少地在模型方面完全重写,GXT3的ModelProviders提供了一些灵活性。任何依赖于模型的事件、存储、记录等的代码都将被重写。

使用BaseModel将GXT2应用程序代码移植到GXT3模型是一项艰巨的任务。它将或多或少地在模型方面完全重写,GXT3的ModelProviders提供了一些灵活性。任何依赖于模型的事件、存储、记录等的代码都将被重写。

可能还需要指出的是,这都是GXT 2-最新版本GXT 3不需要BaseModel,可以使用普通的Java Bean。是的,不要浪费时间考虑GXT2,因为GXT3是一个不错的选择,这一解释对一直使用GXT 2的人仍然有用。这并不是说所有现有的GXT 2项目都会神奇地升级到更新的版本=)也许还值得指出的是,这都是GXT 2-最新版本GXT 3不需要BaseModel,并且可以使用普通的Java beans。是的,不要浪费时间考虑GXT2,因为GXT3是一个不错的选择,这一解释对一直使用GXT 2的人仍然有用。并不是所有现有的GXT 2项目都会神奇地升级到更新的版本=)