我是GWT-P的新成员,但这个主题的资料非常少。我试图制作简单的饼图小部件,用于测试目的。我已经制作了Widget演示者,视图和UiBinder。
package com.rs.gwtp.gametestingyou.client;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
import com.google.inject.Inject;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.HTMLPanel;
public class PieChartPresenter extends
PresenterWidget<PieChartPresenter.MyView> {
public interface MyView extends View {
public HTMLPanel getChartPanel();
public void drawPieChart();
}
@Inject
public PieChartPresenter(final EventBus eventBus, final MyView view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
}
/*Ovde prmeniti method*/
@Override
protected void onReset() {
super.onReset();
/*MyView v = getView();
v.drawPieChart();*/
getView().drawPieChart();
}
}
然后查看。
package com.rs.gwtp.gametestingyou.client;
import com.gwtplatform.mvp.client.ViewImpl;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.visualization.client.AbstractDataTable;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.visualizations.corechart.Options;
import com.google.gwt.visualization.client.visualizations.corechart.PieChart;
import com.google.inject.Inject;
public class PieChartView extends ViewImpl implements PieChartPresenter.MyView {
private final Widget widget;
@UiField HTMLPanel chartPanel;
@UiField (provided=true) PieChart pieChart;
public interface Binder extends UiBinder<Widget, PieChartView> {
}
@Inject
public @UiConstructor PieChartView(final Binder binder) {
widget = binder.createAndBindUi(this);
pieChart = new PieChart(createTable(), createOptions());
chartPanel.add(pieChart);
}
@Override
public Widget asWidget() {
return widget;
}
public HTMLPanel getChartPanel(){
return chartPanel;
}
@Override
public void drawPieChart() {
// OVAJ POKUSAJ
pieChart.draw(createTable(),createOptions());
}
private Options createOptions() {
Options options = Options.create();
options.setWidth(400);
options.setHeight(240);
options.setTitle("My Daily Activities");
return options;
}
private AbstractDataTable createTable() {
DataTable data = DataTable.create();
data.addColumn(ColumnType.STRING, "Task");
data.addColumn(ColumnType.NUMBER, "Hours per Day");
data.addRows(2);
data.setValue(0, 0, "Work");
data.setValue(0, 1, 14);
data.setValue(1, 0, "Sleep");
data.setValue(1, 1, 10);
return data;
}
}
最后一个UiBinder
<!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'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys='com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator'
ui:generateLocales='default'
xmlns:c="urn:import:com.google.gwt.visualization.client.visualizations.corechart" xmlns:v="urn:import:com.google.gwt.visualization.client.visualizations">
<g:HTMLPanel ui:field="chartPanel">
<c:PieChart ui:field="pieChart" ></c:PieChart>
</g:HTMLPanel>
</ui:UiBinder>
当我加载此代码时,我收到错误: [错误] [gametestingyou] - 无法加载模块入口点类com.rs.gwtp.gametestingyou.client.GameTestingYou(有关详细信息,请参阅相关异常)和Umbrella异常。
请帮助:)!
这是完整的例外:
19:14:34.890 [错误] [gametestingyou]无法加载模块入口点类com.rs.gwtp.gametestingyou.client.GameTestingYou(有关详细信息,请参阅相关的异常) com.google.gwt.event.shared.UmbrellaException:捕获到一个或多个异常,请参阅UmbrellaException中的完整设置#getCauses 在com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129) 在com.google.gwt.user.client.impl.HistoryImpl.fireEvent(HistoryImpl.java:75) 在com.google.gwt.event.logical.shared.ValueChangeEvent.fire(ValueChangeEvent.java:43) 在com.google.gwt.user.client.impl.HistoryImpl.fireHistoryChangedImpl(HistoryImpl.java:82) 在com.google.gwt.user.client.History.fireCurrentHistoryState(History.java:121) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.revealCurrentPlace(PlaceManagerImpl.java:310) 在com.rs.gwtp.gametestingyou.client.GameTestingYou.onModuleLoad(GameTestingYou.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 在com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525) 在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 在java.lang.Thread.run(未知来源) 引起:com.google.gwt.event.shared.UmbrellaException:捕获到一个或多个异常,请参阅UmbrellaException中的完整设置#getCauses 在com.google.gwt.event.shared.EventBus.castFireEventFromSource(EventBus.java:77) 在com.google.gwt.event.shared.SimpleEventBus.fireEventFromSource(SimpleEventBus.java:67) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.fireEvent(PlaceManagerImpl.java:146) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.doRevealPlace(PlaceManagerImpl.java:121) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.revealPlace(PlaceManagerImpl.java:339) 在com.rs.gwtp.gametestingyou.client.place.ClientPlaceManager.revealDefaultPlace(ClientPlaceManager.java:24) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.onValueChange(PlaceManagerImpl.java:264) 在com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:128) 在com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:1) 在com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1) 在com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40) 在com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193) 在com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88) 在com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127) 在com.google.gwt.user.client.impl.HistoryImpl.fireEvent(HistoryImpl.java:75) 在com.google.gwt.event.logical.shared.ValueChangeEvent.fire(ValueChangeEvent.java:43) 在com.google.gwt.user.client.impl.HistoryImpl.fireHistoryChangedImpl(HistoryImpl.java:82) 在com.google.gwt.user.client.History.fireCurrentHistoryState(History.java:121) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.revealCurrentPlace(PlaceManagerImpl.java:310) 在com.rs.gwtp.gametestingyou.client.GameTestingYou.onModuleLoad(GameTestingYou.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 在com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525) 在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 在java.lang.Thread.run(未知来源) 引起:java.lang.NullPointerException:null 在com.google.gwt.user.client.ui.HTMLPanel.addAndReplaceElement(HTMLPanel.java:197) 在com.rs.gwtp.gametestingyou.client.PieChartView_BinderImpl.createAndBindUi(PieChartView_BinderImpl.java:33) 在com.rs.gwtp.gametestingyou.client.PieChartView_BinderImpl.createAndBindUi(PieChartView_BinderImpl.java:1) 在com.rs.gwtp.gametestingyou.client.PieChartView。(PieChartView.java:27) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.com $ rs $ gwtp $ gametestingyou $ client $ PieChartView_PieChartView_methodInjection(ClientGinjectorImpl.java:555) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.create_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ PieChartView $ _annotation $$ none $$(ClientGinjectorImpl.java:559) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.get_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ PieChartView $ _annotation $$ none $$(ClientGinjectorImpl.java:570) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.create_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ PieChartPresenter $ MyView $ _annotation $$ none $$(ClientGinjectorImpl.java:1726) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.get_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ PieChartPresenter $ MyView $ _annotation $$ none $$(ClientGinjectorImpl.java:1735) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.create_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ PieChartPresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:1522) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.get_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ PieChartPresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:1533) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.memberInject_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ ShowTestResultsPresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:2069) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.create_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ ShowTestResultsPresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:2079) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.get_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ ShowTestResultsPresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:2092) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.memberInject_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ HomePagePresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:1341) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.create_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ HomePagePresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:1352) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.get_Key $ type $ com $ rs $ gwtp $ gametestingyou $ client $ HomePagePresenter $ _annotation $$ none $$(ClientGinjectorImpl.java:1365) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl.access $ 4(ClientGinjectorImpl.java:1363) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl $ 5 $ 1.onSuccess(ClientGinjectorImpl.java:1413) 在com.google.gwt.core.client.GWT.runAsync(GWT.java:255) 在com.rs.gwtp.gametestingyou.client.gin.ClientGinjectorImpl $ 5.get(ClientGinjectorImpl.java:1411) 在com.gwtplatform.common.client.CodeSplitProvider.get(CodeSplitProvider.java:48) 在com.gwtplatform.mvp.client.proxy.ProxyImpl.getPresenter(ProxyImpl.java:46) 在com.gwtplatform.mvp.client.proxy.ProxyPlaceAbstract.handleRequest(ProxyPlaceAbstract.java:193) 在com.gwtplatform.mvp.client.proxy.ProxyPlaceAbstract.access $ 0(ProxyPlaceAbstract.java:192) 在com.gwtplatform.mvp.client.proxy.ProxyPlaceAbstract $ 1.onPlaceRequest(ProxyPlaceAbstract.java:143) 在com.gwtplatform.mvp.client.proxy.PlaceRequestInternalEvent.dispatch(PlaceRequestInternalEvent.java:134) 在com.gwtplatform.mvp.client.proxy.PlaceRequestInternalEvent.dispatch(PlaceRequestInternalEvent.java:1) 在com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1) 在com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40) 在com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193) 在com.google.web.bindery.event.shared.SimpleEventBus.fireEventFromSource(SimpleEventBus.java:96) 在com.google.gwt.event.shared.SimpleEventBus.fireEventFromSource(SimpleEventBus.java:62) 在com.google.gwt.event.shared.EventBus.castFireEventFromSource(EventBus.java:75) 在com.google.gwt.event.shared.SimpleEventBus.fireEventFromSource(SimpleEventBus.java:67) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.fireEvent(PlaceManagerImpl.java:146) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.doRevealPlace(PlaceManagerImpl.java:121) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.revealPlace(PlaceManagerImpl.java:339) 在com.rs.gwtp.gametestingyou.client.place.ClientPlaceManager.revealDefaultPlace(ClientPlaceManager.java:24) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.onValueChange(PlaceManagerImpl.java:264) 在com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:128) 在com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:1) 在com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1) 在com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40) 在com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193) 在com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88) 在com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127) 在com.google.gwt.user.client.impl.HistoryImpl.fireEvent(HistoryImpl.java:75) 在com.google.gwt.event.logical.shared.ValueChangeEvent.fire(ValueChangeEvent.java:43) 在com.google.gwt.user.client.impl.HistoryImpl.fireHistoryChangedImpl(HistoryImpl.java:82) 在com.google.gwt.user.client.History.fireCurrentHistoryState(History.java:121) 在com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.revealCurrentPlace(PlaceManagerImpl.java:310) 在com.rs.gwtp.gametestingyou.client.GameTestingYou.onModuleLoad(GameTestingYou.java:17) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) 在com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396) 在com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525) 在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 在java.lang.Thread.run(未知来源)
package com.rs.gwtp.gametestingyou.client;
import com.google.gwt.core.client.EntryPoint;
import com.rs.gwtp.gametestingyou.client.gin.ClientGinjector;
import com.google.gwt.core.client.GWT;
import com.gwtplatform.mvp.client.DelayedBindRegistry;
public class GameTestingYou implements EntryPoint {
private final ClientGinjector ginjector = GWT.create(ClientGinjector.class);
@Override
public void onModuleLoad() {
// This is required for Gwt-Platform proxy's generator
DelayedBindRegistry.bind(ginjector);
ginjector.getPlaceManager().revealCurrentPlace();
}
}
答案 0 :(得分:0)
在构造函数中尝试在调用pieChart
createAndBindUi
@Inject
public @UiConstructor PieChartView(final Binder binder) {
pieChart = new PieChart(createTable(), createOptions());
widget = binder.createAndBindUi(this);
chartPanel.add(pieChart);
}
答案 1 :(得分:0)
好的我发现这个问题特定于GWT-P,因为EntryPoint类没有加载所需的PACKAGE。需要加载此方法 VisualizationUtils.loadVisualizationApi(onLoadCallback,PieChart.PACKAGE); 并将Runnable接口添加到实现EntryPoint类的类中,如下例所示:
Runnable onLoadCallback = new Runnable() {
@Override
public void run() {
PieChart pieChart = new PieChart(createTable(), createOptions());
Panel panel = RootPanel.get();
panel.add(pieChart);
}
private AbstractDataTable createTable() {
DataTable data = DataTable.create();
data.addColumn(ColumnType.STRING, "Task");
data.addColumn(ColumnType.NUMBER, "Hours per Day");
data.addRows(2);
data.setValue(0, 0, "Work");
data.setValue(0, 1, 14);
data.setValue(1, 0, "Sleep");
data.setValue(1, 1, 10);
return data;
}
private Options createOptions() {
Options options = Options.create();
options.setWidth(400);
options.setHeight(240);
options.setTitle("My Daily Activities");
return options;
}
};
但是这将在本例中将pieChart添加到RootPanel,现在才弄清楚如何将此对象pieChart添加到特定的PresenterWidget。当我这样做时,我会做一个教程:)
答案 2 :(得分:0)
成功!!!这就是我最终完成我的意图:为现有的GWT-P项目添加一些图表。当我确定API设置正常时,我发现这是解决方案:
UiBinder只需要有HTML表格:
<!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'
ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys='com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator'
ui:generateLocales='default' xmlns:c="urn:import:com.google.gwt.visualization.client.visualizations.corechart"
xmlns:v="urn:import:com.google.gwt.visualization.client.visualizations">
<g:HTMLPanel ui:field="chartPanel">
</g:HTMLPanel>
</ui:UiBinder>
然后View应该很简单:
public class PieChartView extends ViewImpl implements PieChartPresenter.MyView {
private final Widget widget;
@UiField HTMLPanel chartPanel;
public interface Binder extends UiBinder<Widget, PieChartView> {
}
@Inject
public @UiConstructor PieChartView(final Binder binder) {
widget = binder.createAndBindUi(this);
}
@Override
public Widget asWidget() {
return widget;
}
public HTMLPanel getChartPanel(){
return chartPanel;
}
}
然后PresenterWidget,需要通过VisualizationUtils.loadVisualizationApi(onLoadCallback,PieChart.PACKAGE)加载适当的PACKAGE;像这样:
public class PieChartPresenter extends
PresenterWidget<PieChartPresenter.MyView> {
public interface MyView extends View {
public HTMLPanel getChartPanel();
}
@Inject
public PieChartPresenter(final EventBus eventBus, final MyView view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
Runnable onLoadCallback = new Runnable() {
@Override
public void run() {
PieChart pieChart = new PieChart(createTable(), createOptions());
/*Panel panel = RootPanel.get();*/
/*panel.add(pieChart);*/
Panel panel = getView().getChartPanel();
panel.add(pieChart);
}
private AbstractDataTable createTable() {
DataTable data = DataTable.create();
data.addColumn(ColumnType.STRING, "Task");
data.addColumn(ColumnType.NUMBER, "Hours per Day");
data.addRows(2);
data.setValue(0, 0, "Work");
data.setValue(0, 1, 14);
data.setValue(1, 0, "Sleep");
data.setValue(1, 1, 10);
return data;
}
private Options createOptions() {
Options options = Options.create();
options.setWidth(400);
options.setHeight(240);
options.setTitle("My Daily Activities");
return options;
}
};
VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
}
/*Ovde prmeniti method*/
@Override
protected void onReset() {
super.onReset();
}
}
现在这仅用于测试目的,这是我想要的结果:将PieChart放在PresenterWidget中并在通话时显示它。