GIN & GWT: Reliure couche de présentation avec Vue
Question
Je suis en train de lier une vue GWT avec sa couche de présentation, mais il ne semble pas faire quoi que ce soit.
Il est un projet généré GWT Roo printemps et je suis en train d'utiliser l'échafaud donné dans la mesure du possible. La vue est un simple bouton (R.ui.xml) et le reste de la vue est défini dans R.java:
public class R extends Composite implements RPresenter.Display {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField Button myButton;
private ClickHandler buttonClickHandler = null;
public R(){
initWidget(uiBinder.createAndBindUi(this));
}
@UiHandler("myButton")
void onButtonClick(ClickEvent event){
GWT.log('Button clicked');
if (buttonClickHandler != null){
GWT.log("buttonClickHandler event triggered");
buttonClickHandler.onClick(event);
}
}
@Override
public void setButtonClickHandler(ClickHandler buttonClickHandler) {
GWT.log("setButtonClickHandler");
this.buttonClickHandler = buttonClickHandler;
}
}
Le présentateur:
public class RPresenter {
public interface Display extends IsWidget {
void setButtonClickHandler(ClickHandler buttonClickHandler);
}
private final Display display;
private final EventBus eventBus;
@Inject
public RPresenter(EventBus eventBus, Display display){
this.display = display;
this.eventBus = eventBus;
bind();
}
private void bind(){
display.setButtonClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("onClick event triggered");
}
});
}
public void go(HasWidgets container){
container.add(display.asWidget());
}
}
Et pour mon module GIN J'utilise le ScaffoldModule généré dans le paquet ... client.scaffold.ioc:
public class ScaffoldModule extends AbstractGinModule {
@Override
protected void configure() {
GWT.log("ScaffoldModule configure");
bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
bind(ApplicationRequestFactory.class).toProvider(RequestFactoryProvider.class).in(Singleton.class);
bind(PlaceController.class).toProvider(PlaceControllerProvider.class).in(Singleton.class);
//bind(RPresenter.Display.class).to(R.class).in(Singleton.class);
bind(RPresenter.Display.class).to(R.class);
}
static class PlaceControllerProvider implements Provider<PlaceController> {
private final EventBus eventBus;
@Inject
public PlaceControllerProvider(EventBus eventBus) {
this.eventBus = eventBus;
}
public PlaceController get() {
return new PlaceController(eventBus);
}
}
static class RequestFactoryProvider implements Provider<ApplicationRequestFactory> {
private final EventBus eventBus;
@Inject
public RequestFactoryProvider(EventBus eventBus) {
this.eventBus = eventBus;
}
public ApplicationRequestFactory get() {
ApplicationRequestFactory requestFactory = GWT.create(ApplicationRequestFactory.class);
requestFactory.initialize(eventBus);
return requestFactory;
}
}
}
Dans la console de mode de développement GWT, le « configure ScaffoldModule » jamais affiche, mais l'échafaudage généré semble se lier très bien que les événements se passent le long d'un composant à sans accroc, à moins que la liaison se passe comme par magie ailleurs et qui est le code mort.
Quand je mets mon bind (RPresenter.Display.class) .pour (R.class) dans, il ne semble pas faire la liaison. La seule sortie que je reçois dans la console GWT est « bouton cliqué » qui est appelé dans la vue et rien d'autre. Je manque clairement quelque chose, des idées?
La solution
L'appel à GWT.log () ne sera émis quoi que ce soit à partir d'un AbstractGinModule - classes qui étendent AbstractGinModule (ScaffoldModule dans votre situation) sont utilisés par le gin