1

多数の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で要求されるため、1つずつ処理できます。

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...");
    }
});

すべての結果を1か所で取得するにはどうすればよいですか?ありがとう。

4

2 に答える 2

0

igorbel が言ったように、最善の解決策は Command Patter ですが、初心者の場合は、たとえば、1 つの要求で転送する必要がある Bean のみを含む Bean Container を設計できます。

例えば:

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;
}

...

}

于 2010-07-23T12:01:05.017 に答える
0

結果としてすべてのデータを返す新しいサービス メソッドを作成してみませんか?

このようなメソッドの実装は、他のすべてのメソッドを単純に呼び出すことができます。必要なすべてのデータをカプセル化し、単一の結果として返す必要があります。これを処理する方法の一例:

サービスの実装では:

@Override
public Data getAllData(){

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

    return new Data(cars, schools);
}

そして、次のようにメソッドを使用できます。

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...");
    }
});

この種のアプローチを使用すると、クライアント側でのサービス呼び出しの数を最小限に抑えることができます。これにより、読みやすいコードが作成されるだけでなく、通常、アプリのクライアント側が高速化されます。サービス コールの数を常に最小限に抑えるように努める必要があります。

多数の非同期コールバックを収集するというより一般的な問題に関しては、コマンド パターンを使用することをお勧めします。Gwt Remote Action は、前述の RPC 呼び出しを実行するためのパターンの実装を提供するライブラリです。

http://code.google.com/p/gwt-remote-action/

于 2010-07-17T10:44:20.203 に答える