Jestem nowy w GWT i GWTP. Wiem, co to jest podział kodu GWT i podział kodu GWTP Proxy. Mam już czerwony:
http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html http://dev.arcbees.com/gwtp/core/presenters/creating-places.html
Zakładałem, że to rozumiem. Więc lubię używać:
Mam aplikację z Administration panel
, do którego tylko część użytkowników może uzyskać dostęp. Więc nie ma potrzeby pobierania Administration panel
powiązany kod dla wszystkich. Więc w Administration Presenter
Dodałem @ProxyCodeSplit
jak obserwuj:
public class AdminAreaPresenter extends Presenter<AdminAreaPresenter.MyView, AdminAreaPresenter.MyProxy> {
@ProxyCodeSplit
@NameToken(Routing.Url.admin)
@UseGatekeeper(IsAdminGatekeeper.class)
public interface MyProxy extends TabContentProxyPlace<AdminAreaPresenter> {}
@TabInfo(container = AppPresenter.class)
static TabData getTabLabel(IsAdminGatekeeper adminGatekeeper) {
return new MenuEntryGatekeeper(Routing.Label.admin, 1, adminGatekeeper);
}
public interface MyView extends View {}
AppPresenter appPresenter;
@Inject
AdminAreaPresenter(EventBus eventBus, MyView view, MyProxy proxy, AppPresenter appPresenter) {
super(eventBus, view, proxy, AppPresenter.SLOT_TAB_CONTENT);
this.appPresenter = appPresenter;
}
}
W innych Prezenterach mam @ProxyStandard
zamiast @ProxyCodeSplit
.
Uruchomiłem aplikację i zaloguj się. Następnie otworzyłem Network
tab w konsoli programisty chrome:
I po otwarciu Administation Panel
w aplikacji:
Jak widać, do aplikacji nie dodano żadnych nowych zasobów.
Mój główny prezenter aplikacji AppPresenter
implementuje interfejsy AsyncCallStartHandler, AsyncCallFailHandler, AsyncCallSucceedHandler
od: com.gwtplatform.mvp.client.proxy
. i zastępuję te metody:
@ProxyEvent
@Override
public void onAsyncCallStart(AsyncCallStartEvent event) {
Window.alert("Async start");
getView().setTopMessage("Loading...");
}
@ProxyEvent
@Override
public void onAsyncCallFail(AsyncCallFailEvent event) {
Window.alert("Async fail");
getView().setTopMessage("Oops, something went wrong...");
}
@ProxyEvent
@Override
public void onAsyncCallSucceed(AsyncCallSucceedEvent event) {
Window.alert("Async success");
getView().setTopMessage(null);
}
A kiedy wejdę AdmininArea
Przechodzę do allerts: „Asynchroniczny start”, „Asynchroniczny sukces”. Myślę więc, że wszystko działa, ale niestety nie widzę żadnych zmian w zasobach. Proszę o pomoc. Czy robię coś złego czy co?
Odpowiedzi:
1 dla odpowiedzi № 1Podział kodu jest wyłączony w SuperDevMode
ponieważ nie jest kompatybilny z kompilatorem przyrostowym i spowalnia kompilację (zobacz to kwestia).
Aby przetestować dzielenie kodu, skompiluj swój GWT
podanie (mvn clean install gwt:compile
) i przetestuj go w trybie produkcyjnym (pobierz plik wojenny z katalogu docelowego i umieść go np .: w katalogu serwerów Tomcat: webapps
).