如何使用GWT平台的UIHandler?
我一直在努力写作。示例使用gwt平台我已经成功地使用manual reveal获得了contacts视图以获取contacts list,我尝试使用UiHandlers for add button,但它没有调用contacts Presenter的onAddButtonClicked()中的方法 fallowing是我的视图的代码片段如何使用GWT平台的UIHandler?,gwt,gwt-platform,gwt-mvp,gwtp,Gwt,Gwt Platform,Gwt Mvp,Gwtp,我一直在努力写作。示例使用gwt平台我已经成功地使用manual reveal获得了contacts视图以获取contacts list,我尝试使用UiHandlers for add button,但它没有调用contacts Presenter的onAddButtonClicked()中的方法 fallowing是我的视图的代码片段 public class ContactsView extends ViewWithUiHandlers<ContactsViewUiHandlers&g
public class ContactsView extends ViewWithUiHandlers<ContactsViewUiHandlers> implements ContactsPresenter.MyView {
private final Widget widget;
@UiField
Button addButton;
@UiHandler("addButton")
public void onAddButtonClick(ClickEvent e){
System.out.println("add button clicked");
getUiHandlers().onAddButtonClicked();
}
在我的演示者中,我使用onAddButtonClicked()中的事件总线触发一个事件
但是该控件不会出现在我的演示者中,当我单击“添加”按钮时,会出现以下异常
[ERROR] [contactsgwtp] - Uncaught exception escaped
10:17:10.527 [ERROR] [contactsgwtp] Uncaught exception escaped
com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129)
at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129)
at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116)
at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:177)
at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1351)
at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1307)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException: null
at com.saik.in.client.core.ContactsView.onAddButtonClick(ContactsView.java:51)
at com.saik.in.client.core.ContactsView_BinderImpl$1.onClick(ContactsView_BinderImpl.java:50)
at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:54)
at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:1)
at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127)
at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129)
at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116)
at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:177)
at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1351)
at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1307)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Thread.java:662)
任何关于我遗漏的内容的建议,请提前感谢显然
getUiHandlers()
是null
。。。但你知道:——)
我认为造成这种情况的原因可能是您在注入关联的presenter时忘记设置UI处理程序(这是GWTP中的正常过程)-类似于:
public class ContactsPresenter extends Presenter<ContactsPresenter.MyView, ContactsPresenter.MyProxy>
implements ContactsViewUiHandlers
{
public interface MyView extends View, HasUiHandlers { /* nothing */ }
private PlaceManager placeManager;
@Inject
ContactsPresenter( final EventBus eventBus , final MyView view ,
final MyProxy proxy , final PlaceManager placeManager )
{
super( eventBus , view , proxy );
this.placeManager = placeManager;
getView().setUiHandlers( this );
}
...
@Override
public void onAddButtonClicked()
{
placeManager.revealPlace( new PlaceRequest( "somewhereovertheocean" ) );
}
...
}
公共类联系人Presenter扩展演示者
实现ContactsViewuiHandler
{
公共接口MyView扩展视图,HasUiHandlers{/*nothing*/}
私募基金经理;
@注入
ContactsPresenter(最终事件总线、最终MyView视图、,
最终MyProxy代理、最终PlaceManager(最终PlaceManager)
{
超级(事件总线、视图、代理);
this.placeManager=placeManager;
getView().setUiHandlers(此);
}
...
@凌驾
onAddButtonClicked()上的公共无效
{
placeManager.revealPlace(新的PlaceRequest(“海上某处”);
}
...
}
(操作部分是getView().setUiHandlers(this);
和实现ContactsViewUiHandlers
)
顺便说一句,在调用任何方法之前,最好先检查getUiHandlers()
是否为null
希望有帮助
干杯,显然
getUiHandlers()
是null
。。。但你知道:——)
我认为造成这种情况的原因可能是您在注入关联的presenter时忘记设置UI处理程序(这是GWTP中的正常过程)-类似于:
public class ContactsPresenter extends Presenter<ContactsPresenter.MyView, ContactsPresenter.MyProxy>
implements ContactsViewUiHandlers
{
public interface MyView extends View, HasUiHandlers { /* nothing */ }
private PlaceManager placeManager;
@Inject
ContactsPresenter( final EventBus eventBus , final MyView view ,
final MyProxy proxy , final PlaceManager placeManager )
{
super( eventBus , view , proxy );
this.placeManager = placeManager;
getView().setUiHandlers( this );
}
...
@Override
public void onAddButtonClicked()
{
placeManager.revealPlace( new PlaceRequest( "somewhereovertheocean" ) );
}
...
}
公共类联系人Presenter扩展演示者
实现ContactsViewuiHandler
{
公共接口MyView扩展视图,HasUiHandlers{/*nothing*/}
私募基金经理;
@注入
ContactsPresenter(最终事件总线、最终MyView视图、,
最终MyProxy代理、最终PlaceManager(最终PlaceManager)
{
超级(事件总线、视图、代理);
this.placeManager=placeManager;
getView().setUiHandlers(此);
}
...
@凌驾
onAddButtonClicked()上的公共无效
{
placeManager.revealPlace(新的PlaceRequest(“海上某处”);
}
...
}
(操作部分是getView().setUiHandlers(this);
和实现ContactsViewUiHandlers
)
顺便说一句,在调用任何方法之前,最好先检查getUiHandlers()
是否为null
希望有帮助
干杯,查看您提供的例外情况,我认为您错过了以下要点之一:
ContactsPresenter
应实现contactsViewHandler
如下:ContactsPresenter实现contactsViewHandler
ContactsPresenter
的引用设置为contactsView.UIHandlers
如下:getView().setUiHandlers(this)代码>
在做了这两件事之后,你不应该得到提到的异常。我希望这对您有所帮助。查看您提供的例外情况,我认为您遗漏了以下几点之一:
ContactsPresenter
应实现contactsViewHandler
如下:ContactsPresenter实现contactsViewHandler
ContactsPresenter
的引用设置为contactsView.UIHandlers
如下:getView().setUiHandlers(this)代码>
在做了这两件事之后,你不应该得到提到的异常。我希望这对您有所帮助。Contacts View中的第51行是什么?显示演示者的代码。@RAS第51行是getUiHandlers().onAddButtonClicked();在presenter中,我在addButtonClicked()上有公共的void({fireEvent(new AddContactEvent());}ContactsView中第51行是什么?显示演示者的代码。@RAS第51行是getUiHandlers().onAddButtonClicked();在presenter中,我在AddButtonClicked(){fireEvent(new AddContactEvent());}上有公共无效。谢谢这是一个错误,请告诉我如何移动到一个新位置EditContactsView当我单击add按钮时会显示,请您提供任何有助于高效使用gwt平台框架的链接。我建议您也在
演示者中@Inject
插入您的PlaceMaanager
,并将其用于导航-我已编辑了我的答案以概述该内容。在显示EditContactsView时出错,我试着简单地使用一个html面板,然后我的视图就打开了,但是当我添加了以下代码时,它给出的原因是:java.lang.UnsupportedOperationException:这个面板不支持com.google.gwt.user.client.ui.panel.add(panel.java:66)上的no arg add()我使用的是装饰面板,我在其中添加了一个垂直面板和一个水平面板。谢谢这是一个错误,请告诉我如何移动到一个新的位置EditContactsView当我单击add按钮时会显示,请您提供任何有助于高效使用gwt平台框架的链接。我建议您也在演示者中@Inject
插入您的PlaceMaanager
,并将其用于导航-我有