Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.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
Java 如何收集大量异步回调?_Java_Gwt_Gwt Rpc_Gwt Mvp - Fatal编程技术网

Java 如何收集大量异步回调?

Java 如何收集大量异步回调?,java,gwt,gwt-rpc,gwt-mvp,Java,Gwt,Gwt Rpc,Gwt Mvp,是否有任何技术可以收集大量gwt rpc服务回调结果 我有一个对话框窗口用于创建新对象或编辑现有对象。这些对象有许多对其他对象的引用。因此,当用户创建或编辑对象时,他可以在列表框中选择一个对象 public class School { private String name; private String address; } public class Car { private String model; private String type; } pu

是否有任何技术可以收集大量gwt rpc服务回调结果

我有一个对话框窗口用于创建新对象或编辑现有对象。这些对象有许多对其他对象的引用。因此,当用户创建或编辑对象时,他可以在列表框中选择一个对象

public class School {
    private String name;
    private String address;
}

public class Car {
    private String model;
    private String type;
}

public class Person {
    private String firstName;
    private String lastName;
    private School school;
    private Car firstCar;
}
当对话框窗口出现在屏幕上时,它应该请求所有引用字段的所有可用值。这些值是通过gwt rpc通过AsyncCallback请求的,所以我可以逐个处理它

service.getAllSchools(new AsyncCallback<List<School>>() {
    @Override
    public void onSuccess(List<School> result) {
        fillSchoolListBox(result);
    }

    @Override
    public void onFailure(Throwable caught) {
        Window.alert("ups...");
    }
});
...
service.getAllSchools(new AsyncCallback<List<Car>>() {
    @Override
    public void onSuccess(List<Car> result) {
        fillCarListBox(result);
    }

    @Override
    public void onFailure(Throwable caught) {
        Window.alert("ups...");
    }
});
service.getAllSchools(新的AsyncCallback(){
@凌驾
成功时公开作废(列表结果){
填写学校列表框(结果);
}
@凌驾
失败时的公共无效(可丢弃){
窗口。警报(“ups…”);
}
});
...
service.getAllSchools(新的AsyncCallback(){
@凌驾
成功时公开作废(列表结果){
填写列表框(结果);
}
@凌驾
失败时的公共无效(可丢弃){
窗口。警报(“ups…”);
}
});
如何在一个地方获得所有结果?
谢谢。

为什么不创建一个新的服务方法来返回结果中的所有数据

这种方法的实现可以简单地调用所有其他方法。您必须封装所有必需的数据,并将其作为单个结果返回。您如何处理此问题的一个示例:

在服务实现中:

@Override
public Data getAllData(){

    List<Cars> cars = this.getAllCars();
    List<School> schools = this.getAllSchools();

    return new Data(cars, schools);
}
@覆盖
公共数据getAllData(){
List cars=this.getAllCars();
List schools=this.getAllSchools();
返回新数据(汽车、学校);
}
然后您可以使用如下方法:

service.getAllData(new AsyncCallback<Data data>() {
    @Override
    public void onSuccess(Data data) {
        fillCarListBox(data.getCars());
        fillSchoolListBox(data.getSchools());
    }

    @Override
    public void onFailure(Throwable caught) {
        Window.alert("Pogreska...");
    }
});
service.getAllData(新的AsyncCallback(){
@凌驾
成功时的公共无效(数据){
fillCarListBox(data.getCars());
fillSchoolListBox(data.getSchools());
}
@凌驾
失败时的公共无效(可丢弃){
Window.alert(“Pogreska…”);
}
});
使用这种方法,您可以最小化客户端的服务调用数量。这不仅创建了更可读的代码,而且通常还加快了应用程序客户端的速度。您应该始终尽量减少服务调用的数量,最好是单个服务调用

关于收集大量异步回调的更一般的问题,一个好的方法是使用命令模式。Gwt Remote Action是一个库,它为执行RPC调用提供了上述模式的实现:


最好的解决方案是像igorbel所说的命令模式,但是如果你是初学者,你可以设计一个只包含必须在一次请求中传输的Bean的Bean容器

例如:

公共类信标容器{
私立ArrayList学校=新建ArrayList();
私人ArrayList车=新ArrayList;
private ArrayList people=ArrayList()

公立学校(学校){
此.schools.add(school);
}
公共学校集合(ArrayList学校){
此.schools.add(学校);
}
公共阵列列表getSchoolCollection(){
返回学校;
}
...
}

public class BeanContainer{ private ArrayList<School> schools = new ArrayList<School>(); private ArrayList<Car> cars = new ArrayList<Car>; private ArrayList<Person> people = ArrayList<Person>();

public void addSchool(School school){
    this.schools.add(school);
}

public void addSchoolCollection(ArrayList<School> schools){
    this.schools.add(schools);
}

public ArrayList<School> getSchoolCollection(){
    return schools;
}

...