1つの場所と1つのアクティビティを使用する単純なGWTアプリを実装しました(これAbstractActivity
は、Composite
「ビュー」サブクラスを拡張し、含むプレゼンターとして実装しました)。ビュー内の唯一の UI オブジェクトは、「ホームページ」の一番上に表示したいGWT-Bootstrap NavBarです。
Eclipse 内からローカルでアプリを実行していますが、コンパイラ エラーやランタイム エラーは発生しません。開発モードコンソールが示す URL に移動すると、ブラウザが少し停止し (ブラウザが JavaScript を「ダウンロード」していると想定します)、(NavBar の代わりに) 空白の白い画面が表示されます。 . ウィンドウのタイトルは正しく (モジュールの HTML ページでこれを設定しました)、ソースを表示すると同じ HTML ソースが表示されるので、アプリの JavaScript がブラウザーに適切に到達していることがわかります。NavBar をレンダリングしていないだけです。
、 my default 、、、 presenter 、および viewにSystem.out.println()
ステートメントを散りばめました。これらのステートメントはすべて開発コンソールに出力されます。すべてを正しく配線したこと、および実行時にメソッドが呼び出されたときに (内部から)、NavBar が表示されるはずであることを教えてくれます。onModuleLoad()
ActivityManager
ActivityMapper
PlaceHistoryMapper
Composite
sysout
PlaceHistoryHandler#handleCurrentHistory
onModuleLoad
私が考えることができる唯一の可能性は次のとおりです。
- 構成
gwt-bootstrap
が正しくありません。また - UiBinder を正しく使用していません
RootLayoutPanel
アクティビティと場所の使用方法、または UI をinsideにアタッチする方法に何か問題があります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>
私が気づいたことの 1 つは、UiBinder XML に自分のNavBar
内部があることです。HTMLPanel
私がこれを行ったのは、Google-Eclipse プラグインを使用して新しい UiBinder を生成したためです (これは、UiBinder スニペットと同様Composite
に (私は extend に変更しBaseDisplay
、それ自体 extends ) の両方を自動生成しました)。Composite
この内部の UI フィールドHTMLPanel
...(?)
ここで何か不足している場合はお知らせください。私はそれが私のために何をするかを信じNavBar
ているので、フィールドをインスタンス化していません。createAndBindUi
gwt-bootstrap
構成と UiBinder の使用の両方が正しいように見える場合は、明らかに他の何かが間違っているため、さらにコードを投稿する必要があります。これらの最初の2つの項目が除外される前に、最初はそれを保留したかっただけです. 前もって感謝します!
アップデート
ここにある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();
}