我是GWT的新手并且能够使用GWT RPC,但在理解控制流如何在内部发生方面存在问题。如何将其转换为AJAX?
我们可以使用new()
代替GWT.create(someService.class)
来进行RPC调用吗?
为什么Google不仅仅使用Async版本而不是创建2个接口?
使用
时内部会发生什么TaskService Async = GWT.create(TaskService.class);
我已经读过它选择了浏览器特定的hashname.js
文件,但我不了解完整的控制流程。另外,如何使用回调对象。
有人可以通过指出要点来解释控制流程吗?
更新:@Thomas Broyer,我理解的一切......只是确认如果GWT.create()在客户端有一个.rpc文件,这有助于延迟(晚期/运行时)绑定。这是对的吗?
答案 0 :(得分:4)
GWT.create()
将调用GWT生成器;它将生成一个实现Async接口的类(这就是为什么你只需要声明一个接口而你自己永远不会实现它。)
见RPC Plumbing Diagram。
使用生成器(或选择特定实现,但在GWT-RPC的情况下,使用生成器)被称为deferred binding。
所以,不,你不能使用new
。
至于为什么有2个接口,这样GWT可以检查您的服务器端代码(同步)是否与客户端代码(异步)一致。您在同步接口上调用GWT.create
并返回异步的实现的原因是遗留的。我打赌他们不会那样做,他们是从头开始重新实施GWT-RPC。
生成的类将负责序列化调用(方法名称和参数)并发出AJAX请求(使用RequestBuilder
);然后反序列化响应(声明的类型或异常)
因为调用是异步的,所以回调用于在服务器响应后调用代码,在反序列化发生后(因此要么用解码的对象调用onSuccess
,要么{{1}用解码的异常)。
请参阅Getting Used to Asynchronous Calls