Java GWT异步回调的使用;代码管理
这里是GWT新手,我试图理解使用RPC时GWT的原理。假设我有Java GWT异步回调的使用;代码管理,java,gwt,asynccallback,Java,Gwt,Asynccallback,这里是GWT新手,我试图理解使用RPC时GWT的原理。假设我有onModuleLoad(),并且有一个登录页面(用户名和密码)。因此,当用户单击submit时,它会调用new ClickHandler(),并说我需要执行以下操作: 验证用户身份(密码和用户名有效) 记录条目 将用户添加到会话 问题: 我是否需要为上面的每个项目编写AsyncCallback 客户端上的每个操作是否都应该有一个AsyncCallback,带有onFailure和onSuccess?编码不是太多吗(与struts相比
onModuleLoad()
,并且有一个登录页面(用户名和密码)。因此,当用户单击submit时,它会调用new ClickHandler()
,并说我需要执行以下操作:
AsyncCallback
李>
AsyncCallback
,带有onFailure
和onSuccess
?编码不是太多吗(与struts相比?)onSuccess
中嵌套了2个异步回调,这是一个大问题,因为SessionService的执行是在我为最终用途在屏幕上放置消息之后进行的
MongoDBServiceAsync mongoDBServiceAsync = GWT.create(MongoDBService.class);
ServiceDefTarget serviceDef = (ServiceDefTarget) mongoDBServiceAsync;
serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()+ "dbservice");
try{
mongoDBServiceAsync.isValidUser(user, new AsyncCallback<User>(){
@Override
public void onFailure(Throwable caught)
{
//show error to user
}
@Override
public void onSuccess(User userDB)
{
SessionService.Util.getInstance().addUserToSession(userDB, new AsyncCallback<Void>(){ //yet another AsyncCallback
@Override
public void onFailure(Throwable caught)
{
//something went wrong
}
@Override
public void onSuccess(Void result)
{
//add user to session
// problem - this can be executed AFTER I wrote on screen: Hello USER_NAME
}});
}
});
mongodbservicecasync mongodbservicecasync=GWT.create(MongoDBService.class);
ServiceDefTarget serviceDef=(ServiceDefTarget)mongoDBServiceAsync;
serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()+“dbservice”);
试一试{
isValidUser(用户,新的AsyncCallback()){
@凌驾
失败时的公共无效(可丢弃)
{
//向用户显示错误
}
@凌驾
成功时的公共void(用户userDB)
{
SessionService.Util.getInstance().addUserToSession(userDB,新的AsyncCallback(){//还有一个AsyncCallback
@凌驾
失败时的公共无效(可丢弃)
{
//出了点问题
}
@凌驾
成功时公开作废(作废结果)
{
//将用户添加到会话
//问题-我在屏幕上写下:Hello USER\u NAME后,可以执行此操作
}});
}
});
对于每个GWT RPC调用,异步回调
都是必需的。也就是说,我们能够根据服务器管理用户的操作
实际问题是,您需要嵌套多个RPC。只需修改isValidUser
服务器端实现,这样它也可以将用户添加到会话中
User isValidUser(User user) {
//validate user with DB
//if valid, add to session
return user
}
asynccallback
对于每个GWT RPC调用都是必需的。这就是我们能够根据服务器管理用户的操作
实际问题是,您需要嵌套多个RPC。只需修改isValidUser
服务器端实现,这样它也可以将用户添加到会话中
User isValidUser(User user) {
//validate user with DB
//if valid, add to session
return user
}
“验证用户”和“将用户添加到会话”不是反解耦吗?我的意思是,我不想将这两项封装在一起,因为它们是不同的操作。那么,我剩下的是嵌套onSuccess吗?谢谢Suresha!RPC粒度应该相当粗糙(如果只是为了性能),然后在您的RemoteServiceServlet中,您可以自由分解并分派到更细粒度的业务服务。@adhg为什么不简单地创建另一个RPC
authenticateUser
用于登录?难道“验证用户”和“将用户添加到会话”不就是反解耦吗?我的意思是,我不想将这两项按原样封装在一起不同的操作。那么,我剩下嵌套的onSuccess了吗?谢谢Suresha!RPC粒度应该相当粗糙(如果只是为了性能),那么在RemoteServiceServlet中,您可以自由分解并分派到更细粒度的业务服务。@adhg为什么不创建另一个RPCauthenticateUser
用于登录?