我试图将GWT视图与其表示层绑定,但它似乎什么也做不了。
这是一个Spring Roo GWT生成的项目,我正在尝试尽可能使用给定的脚手架。视图是一个简单的按钮(R.ui.xml),视图的其余部分在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;
}
}演示者:
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());
}
}对于我的GIN模块,我使用...client.scaffold.ioc包中生成的ScaffoldModule:
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;
}
}
}在GWT开发模式控制台中,永远不会显示"ScaffoldModule configure“,但是,当事件在组件之间顺利传递时,生成的脚手架似乎绑定得很好,除非绑定是在其他地方神奇地发生的,这是死代码。
当我把我的绑定(RPresenter.Display.class).to(R.class)放进去时,它似乎不能进行绑定。我在GWT控制台中得到的唯一输出是"Button clicked“,它在视图中被调用,然后就什么都没有了。我显然漏掉了什么,有什么想法吗?
发布于 2011-01-14 06:12:16
对GWT.log()的调用不会从AbstractGinModule输出任何东西- gin at compile time使用扩展AbstractGinModule的类(在您的情况下是ScaffoldModule)来决定将哪些具体实现用于注入的接口。从您描述的其余部分(即UI显示在应用程序中)可以看出,您的依赖项注入工作正常。
https://stackoverflow.com/questions/4676686
复制相似问题