我正在尝试修改 GWT 2.1 HelloMVP 示例代码以使用更复杂的 UI。(由于两个链接限制,我不允许提供链接)
我的问题是 ActivityManager.setDisplay 只接受实现 AcceptsOneWidget 的对象。LayoutPanel 和其他 ComplexPanel 不实现 AcceptsOneWidget。示例代码改为使用 SimplePanel。但我似乎无法在 SimplePanel 中嵌套复杂的小部件(它们不显示)。
我发现了一些关于这个问题的讨论:
人们建议解决方案是创建一个我想要实现 AcceptsOneWidget 接口的 ComplexPanel 的子类。像这样:
public class PanelForView extends LayoutPanel implements AcceptsOneWidget {
IsWidget myWidget = null;
@Override
public void setWidget(IsWidget w) {
if (myWidget != w) {
if (myWidget != null) {
remove(myWidget);
}
if (w != null) {
add(w);
}
myWidget = w;
}
}
}
这听起来不错,但似乎对我不起作用。也许是因为我使用的是 GWT 2.3 而不是 2.1 或 2.2。在我的 EntryPoint 中,我希望简单地将 SimplePanel 替换为我的新 PanelForView 类,并让应用程序像以前一样运行。像这样:
public class HelloMVP implements EntryPoint {
private Place defaultPlace = new HelloPlace("World!");
// private SimplePanel appWidget = new SimplePanel(); // Replace this with PanelForView
private PanelForView appWidget = new PanelForView(); // This compiles but doesn't work.
// private SimpleLayoutPanel appWidget = new SimpleLayoutPanel(); // This doesn't work either.
public void onModuleLoad() {
// Create ClientFactory using deferred binding so we can replace with different
// impls in gwt.xml
ClientFactory clientFactory = GWT.create(ClientFactory.class);
EventBus eventBus = clientFactory.getEventBus();
PlaceController placeController = clientFactory.getPlaceController();
// Start ActivityManager for the main widget with our ActivityMapper
ActivityMapper activityMapper = new AppActivityMapper(clientFactory);
ActivityManager activityManager = new ActivityManager(activityMapper, eventBus);
activityManager.setDisplay(appWidget);
// Start PlaceHistoryHandler with our PlaceHistoryMapper
AppPlaceHistoryMapper historyMapper= GWT.create(AppPlaceHistoryMapper.class);
PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper);
historyHandler.register(placeController, eventBus, defaultPlace);
RootPanel.get().add(appWidget);
// Goes to place represented on URL or default place
historyHandler.handleCurrentHistory();
}
}
这编译得很好,但是当我运行它时,我现在只看到一个空白屏幕。初始化 ComplexPanel 是否需要做一些额外的事情?我是不是误会了什么?我试过添加小部件并调用 setSize 无济于事。这是我的第一个 GWT 项目。
谢谢你的时间。
科里