質問

私はこのようなものを持っています:

request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>() {

    @Override
    public void onSuccess(List<ProjectProxy> response) {
        view.setProjects(response);                     
    }
});
.

抽象クラスの匿名の内部クラスです。ExtraCeiverは、提供したいErrorHandlerでエラーを処理するためのものです。

public abstract class ExtReceiver<T> extends Receiver<T> {


    private ErrorHandler errorHandler;


    public ExtReceiver() {
    }

    @Inject
    public void setErrorHandler(ErrorHandler errorHandler)
    {
        this.errorHandler = errorHandler;
    }

    @Override
    public abstract void onSuccess(T response);

    @Override
    public void onFailure(ServerFailure error) {
        errorHandler.exception(error);
    }

    @Override
    public void onViolation(Set<Violation> errors) {
        ValidationUtils.processViolation(errors);
    }

}
.

新しい演算子を使用するので、これが機能できない理由を理解しています。しかし、どうやってこのようなことをすることができますか。私はその匿名クラスを持ち、それを自分のファイルか何かに置きたいです。 どのように私はそのエラーハンドラーを挿入することができますか?除電について考えたが、このように見えているように見えた(たぶん私が匿名クラスをして作成した継承のために)

通常のガスとは反対側のInjector.GetInstance()呼び出しを知りません。

情報の場合:それはrequestFactory Call です。

役に立ちましたか?

解決

抽象クラスのコンストラクタにErrorHandlerパラメータを入力しない代わりに別のSetErrorHandlerセッターを作成します。

public abstract class ExtReceiver<T> extends Receiver<T> {

    private ErrorHandler errorHandler;

    @Inject
    public ExtReceiver(ErrorHandler errorHandler) {
         this.errorHandler = errorHandler;
    }

}
.

バインディングを宣言する:

public class MyClientModule extends AbstractGinModule {
  protected void configure() {
    bind(ErrorHandler.class).in(Singleton.class);
  }
}
.

あなたのErrorHandlerクラスのginjectorをモジュールに注釈付けする:

@GinModules(MyClientModule.class)
public interface MyErrorHandlerInjector extends Ginjector {
  ErrorHandler getErrorHandler();
}
.

そしてこのようにそれを使用してください:

MyErrorHandlerGinjector injector = GWT.create(MyErrorHandlerGinjector.class);
ErrorHandler errorHandler = injector.getErrorHandler();
request.findAllProjects().fire(new ExtReceiver<List<ProjectProxy>>(errorHandler) {      

        @Override
        public void onSuccess(List<ProjectProxy> response) {
            view.setProjects(response);

        }           
    });
.

これが働くべきだと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top