Leider habe ich nicht eine angemessene Antwort bekommen, so entwickelte ich meine eigene Lösung.
Zuerst habe ich hinzugefügt Resty Konfiguration RestyGwtConfig
meiner Modulkonfiguration
public class ClientModule extends AbstractPresenterModule {
@Override
protected void configure() {
bind(RestyGwtConfig.class).asEagerSingleton();
install(new DefaultModule.Builder()
.defaultPlace(Routing.HOME.url)
.errorPlace(Routing.ERROR.url)
.unauthorizedPlace(Routing.LOGIN.url)
.tokenFormatter(RouteTokenFormatter.class).build());
install(new AppModule());
install(new GinFactoryModuleBuilder().build(AssistedInjectionFactory.class));
bind(ResourceLoader.class).asEagerSingleton();
}
}
dann habe ich Gewohnheit distpatcher für alle meine Komunikation Anfragen von resty gwt gesetzt.
import org.fusesource.restygwt.client.Defaults;
import org.fusesource.restygwt.client.Resource;
import pl.korbeldaniel.cms.shared.ServiceRouting;
import com.google.gwt.core.client.GWT;
import com.google.inject.Inject;
public class RestyGwtConfig {
@Inject
public RestyGwtConfig(RestyDispatcher dispatcher) {
Defaults.setDispatcher(dispatcher);
}
}
Dann habe ich hinzugefügt benutzerdefinierte Filter (ProgressIndicatorFilter
) zu handhaben Mitteilung der Start und Ende Rückrufe:
import org.fusesource.restygwt.client.Method;
import org.fusesource.restygwt.client.dispatcher.DefaultFilterawareDispatcher;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.inject.Inject;
public class RestyDispatcher extends DefaultFilterawareDispatcher {
@Inject
public RestyDispatcher(ProgressIndicatorFilter progressIndicatorFilter) {
addFilter(progressIndicatorFilter);
}
}
in Verfahren Filterklasse außer Kraft gesetzt filter
Ich habe ein Ereignis-Trigger hinzugefügt (eventBus.fireEvent(new IndicatorEvent("Rest-Gwt Comunication started"));
) und registrierter Rückruf, hier ist der ganze Code:
import org.fusesource.restygwt.client.Method;
import org.fusesource.restygwt.client.dispatcher.DispatcherFilter;
import pl.korbeldaniel.cms.client.template.progressIndicator.IndicatorEvent;
import com.google.gwt.http.client.RequestBuilder;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
class ProgressIndicatorFilter implements DispatcherFilter {
private AssistedInjectionFactory factory;
private EventBus eventBus;
@Inject
public ProgressIndicatorFilter(AssistedInjectionFactory factory, EventBus eventBus) {
this.factory = factory;
this.eventBus = eventBus;
}
@Override
public boolean filter(Method method, RequestBuilder builder) {
builder.setCallback(factory.createProgressIndicatorCallback(method));
eventBus.fireEvent(new IndicatorEvent("Resty-Gwt Comunication started"));
return true;
}
}
einen Rückruf Die Registrierung konnte nicht gerade nach vorne getan werden, wie
new ProgressIndicatorDispatcherCallback()
Ursache verwende ich Dependency Injection. Also habe ich eine Fabrik erstellt Injektion wie folgt zu unterstützen:
public interface AssistedInjectionFactory {
ProgressIndicatorDispatcherCallback createProgressIndicatorCallback(Method method);
}
Here und here Sie können mehr Assisted Injection Infos. Hier
ist der Rückruf-Code:
class ProgressIndicatorDispatcherCallback implements RequestCallback {
private RequestCallback requestCallback;
private EventBus eventBus;
@Inject
public ProgressIndicatorDispatcherCallback(@Assisted Method method, EventBus eventBus) {
this.requestCallback = method.builder.getCallback();
this.eventBus = eventBus;
}
@Override
public void onResponseReceived(Request request, Response response) {
endComunicationFireIvent();
requestCallback.onResponseReceived(request, response);
}
@Override
public void onError(Request request, Throwable exception) {
endComunicationFireIvent();
requestCallback.onError(request, exception);
}
private void endComunicationFireIvent() {
eventBus.fireEvent(new IndicatorEvent("Rest-Gwt Comunication ended"));
}
}
Bitte klären, was Sie tun wollen. Benötigen Sie Fortschrittsinformationen (10%, 20% usw.) oder müssen Sie nur wissen, dass eine bestimmte Anfrage gesendet wurde? –
Beides wäre toll: D, aber im Moment wäre die einfachste Lösung genug. – masterdany88