我已经实现了一个简单的 GWT 应用程序,它使用 1 个 Place 和 1 个 Activity(我已经实现了一个 Presenter,它扩展了一个AbstractActivity
并包含一个Composite
“视图”子类)。视图中的第一个也是唯一的 UI 对象是一个GWT-Bootstrap NavBar,我希望它出现在我的“主页”的最顶部。
我正在从 Eclipse 内部本地运行应用程序,并且没有收到任何编译器或运行时错误。当我转到开发模式控制台指向的 URL 时,我在浏览器中稍作停顿(我假设这是浏览器“下载”JavaScript),然后我看到一个空白屏幕(而不是我的导航栏) . 窗口标题是正确的(我在模块的 HTML 页面中设置了这个),当我查看源代码时,我看到了相同的 HTML 源代码,所以我知道应用程序的 JavaScript 正在正确地进入浏览器。它只是不渲染导航栏。
我System.out.println()
在整个onModuleLoad()
、我的 default ActivityManager
、ActivityMapper
、PlaceHistoryMapper
、presenter 和 viewComposite
中都添加了语句,所有这些sysout
语句都打印在开发控制台中;告诉我我已将所有内容正确连接在一起,并且在运行时PlaceHistoryHandler#handleCurrentHistory
(从内部onModuleLoad
)调用该方法时,我应该看到我的 NavBar。
我能想到的唯一可能是:
- 我配置
gwt-bootstrap
错误;或者 - 我没有正确使用 UiBinder
- 我如何使用活动和地点,或者我如何将用户界面附加到
RootLayoutPanel
内部,还有其他问题onModuleLoad()
。
至于gwt-bootstrap
:
- 我将 JAR 放在项目的类路径中(我知道这一点,因为当我在小部件/视图
UiField
中包含新类型时NavBar
,我没有收到任何编译器错误) - 我添加
<inherits name="com.github.gwtbootstrap.Bootstrap"/>
到我的 GWT 模块 XML
所以如果我还有什么需要配置的,请告诉我!
至于 UiBinder 的东西,这是我的小部件/视图:
public class WebRootDisplay extends BaseDisplay {
private static WebRootDisplayUiBinder uiBinder = GWT
.create(WebRootDisplayUiBinder.class);
interface WebRootDisplayUiBinder extends UiBinder<Widget, WebRootDisplay> {
}
@UiField
Navbar navBar;
public WebRootDisplay(EventBus eventBus) {
super(eventBus);
System.out.println("I get this printing to the console at runtime.");
initWidget(uiBinder.createAndBindUi(this));
System.out.println("...and this too!");
}
}
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">
<g:HTMLPanel>
<b:Navbar ui:field="navBar">
<b:Nav>
<b:NavLink href="http://www.google.com">
Home
</b:NavLink>
</b:Nav>
</b:Navbar>
</g:HTMLPanel>
</ui:UiBinder>
我注意到的一件事是我在 UiBinder XML 中有我的NavBar
内部。HTMLPanel
我这样做是因为我使用 Google-Eclipse 插件为我生成了一个新的 UiBinder(它自动生成了Composite
(然后我将其修改为 extend BaseDisplay
,它本身 extends Composite
)以及 UiBinder 片段。我想 GWT 希望我把所有这里面的 UI 字段HTMLPanel
...(?)
如果我在这里遗漏任何东西,请告诉我。我没有实例化该NavBar
字段,因为我相信这createAndBindUi
对我有用。
如果我的gwt-bootstrap
配置和我对 UiBinder 的使用看起来都是正确的,那么显然还有其他问题,我将不得不发布更多代码。我只是想在前两项被排除之前先推迟一下。提前致谢!
更新
这里是onModuleLoad
:
public void onModuleLoad() {
// Some homegrown DI stuff. I have verified that the injector works properly.
ApplicationScope appScope = new ApplicationScope();
setInjector(new ApplicationInjector(appScope,
InjectorProvider.newMasterProvider()));
// Add the sole composite child to the RootLayoutPanel.
// I have verified that injectWebRootDisplay returns a fully configured
// WebRootDisplay instance.
RootLayoutPanel.get().add(injector.injectWebRootDisplay());
historyHandler.register(placeController, eventBus, defaultPlace);
historyHandler.handleCurrentHistory();
}