Lop*_*hin 3 gwt requestfactory
在Google io 2011中,David Chandler提到您可以使用append()方法链接不同的请求上下文,但在实践中,我不知道如何在它们具有不同的接收器时将它们链接起来,使用to()然后触发( )?
请帮忙.
有两种类型的接收器:绑定到每个方法调用(将传递给所述的那些Request
的to()
方法),并在上下文一级(即传递给所述RequestContext
的fire()
方法).这个方法是一个简单Request
的fire(Receiver)
方法to(receiver).fire()
,即它绑定Receiver
到方法.
该方法级接收机取决于方法而已,他们的通用参数取决于方法的返回值(的泛型参数Request
或InstanceRequest
),所以不管你append()
几个RequestContext
小号一起变化绝对没有.
上下文级接收器始终参数化Void
.当您append()
一起上下文时,它们实际上形成了具有多个接口的单个上下文,因此您只能fire()
在任何一个附加的上下文中调用一次.
现在让我们回到基础:不使用append()
,您只能批量调用在上下文接口上声明的方法.如果您要使用两个不同的上下文接口,则必须生成两个fire()
,即两个HTTP请求.引言append()
允许您批量调用在任何上下文接口上声明的方法:简单地将上下文附加到另一个上下文,并且两个上下文中的调用将在同一HTTP请求中一起批处理,由fire()
任何一个上下文中的唯一触发附加.
现在进入技术细节:在内部,上下文只不过是一个状态对象的薄包装器.当您edit()
或create()
代理将其添加到内部状态时,当您调用服务方法时,方法名称(实际上是其混淆的标记)和参数也会被捕获并推送到该状态.当你append()
是一个上下文时,你只是让它与你追加它的上下文之一共享它的内部状态.这样,当您在附加上下文上调用服务方法时,它将推送到与其他上下文完全相同的状态,并且当您中的fire()
任何一个上下文时,状态将被序列化为单个HTTP请求.
请注意,要附加上下文,其自身的内部状态必须为空,否则将引发异常,因为状态将被抛弃以替换为其他上下文之一.
简而言之,在实践中:
FirstContext first = rf.first();
SomeProxy proxy = first.create(SomeProxy.class);
...
SecondContext second = first.append(rf.second());
OtherProxy other = second.create(OtherProxy.class);
other.setSome(proxy);
...
second.saveAndReturnSelf(other).to(new Receiver<OtherProxy>() {
...
});
...
first.fire();
Run Code Online (Sandbox Code Playgroud)
请注意,创建和附加第二个上下文的行同样可以写成:
SecondContext second = rf.second();
first.append(second);
Run Code Online (Sandbox Code Playgroud)
该append
方法返回其参数是为了方便,但它实际上与您传递给参数的值相同.这只是为了允许在上面写上单线,而不是被迫使用双线.