java - 如何防止 View 在第一次调用后加载多次?

标签 java eclipse gwt

当我第一次打开“EditAwardsView1”时,Window.alert 显示一次。我输入数据,选择“保存”按钮,我保存到数据库一次。到目前为止一切顺利。

但是,我随后返回到上一个 View “SelectPerson”,然后再次打开“EditAwardsView1”。这次 Window.alert 显示两次,我收到一个“Uncaught exception escaped”错误。我输入数据,选择“保存”按钮,然后两次保存到数据库。

如果我再次重复此操作(返回到“SelectPerson”,然后返回到“EditAwardsView1”)Window.alert 显示五次并且我收到四个“未捕获的异常已转义”错误。我输入数据,选择“保存”按钮,我向数据库保存了五次。

“SelectPerson” View 的调用代码是:

btnEditAward.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        navHandler2.go("EditAwards1");
    }
});
btnEditAward.setStyleName("gwt-PushButton-up");
btnEditAward.setText("Edit Awards");
btnEditAward.setWidth("184px");
btnEditAward.setHeight("40px");
horizontalPanel.add(btnEditAward);

“EditAwards1”中的入口点是:

public EditAwardsView1(final NavHandler navHandler) {

    rpc = (DBConnectionAsync) GWT.create(DBConnection.class);
    ServiceDefTarget target = (ServiceDefTarget) rpc;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "MySQLConnection";
    target.setServiceEntryPoint(moduleRelativeURL);

    navHandler2 = navHandler;

    //On load of page get the stored view data
    //TODO Fix null pointer on reload.
    verticalPanel.addAttachHandler(new Handler() {
        int pog = 0;
        public void onAttachOrDetach(AttachEvent event) {
            if (pog == 0) {
                pog++;
                verticalPanel.clear();
                listBoxAwardType.clear();
                awardGrouped = null;
                Window.alert("EditAwardsView1.");

                //Retrieve stored data for this view.                   
                AsyncCallback<ViewData> callback = new ViewDataHandler2<ViewData>(EditAwardsView1.this);
                rpc.getViewData(callback);

            }else{
                pog = 0;
            }
        }
    });
    initWidget(verticalPanel);
}

从“EditAwardsView1”返回到“SelectPerson” View 的调用代码是:

//Button btnSelectYouthMember = new Button("Select Youth Member");
        btnSelectYouthMember.setStyleName("gwt-PushButton-up");
        btnSelectYouthMember.setText("Select Youth Member");
        btnSelectYouthMember.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                navHandler2.go("SelectPerson");
            }
        });
        btnSelectYouthMember.setWidth("184px");
        btnSelectYouthMember.setHeight("40px");
        horizontalPanel_Menu.add(btnSelectYouthMember);

错误是:

[ERROR] [org.AwardTracker.AwardTracker] - Uncaught exception escaped


15:58:18.009 [ERROR] [org.AwardTracker.AwardTracker] Uncaught exception escaped

com.google.gwt.core.client.JavaScriptException: (TypeError) @com.google.gwt.core.client.impl.Impl::apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)([JavaScript object(12426), JavaScript object(2059), JavaScript object(12432)]): Unable to set property 'onfocus' of undefined or null reference
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:249)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
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:242)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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:338)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:299)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)
at com.google.gwt.user.client.Window.alert(Window.java)
at org.AwardTracker.client.EditAwardsView1$3.onAttachOrDetach(EditAwardsView1.java:131)
at com.google.gwt.event.logical.shared.AttachEvent.dispatch(AttachEvent.java:100)
at com.google.gwt.event.logical.shared.AttachEvent.dispatch(AttachEvent.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.logical.shared.AttachEvent.fire(AttachEvent.java:52)
at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:351)
at com.google.gwt.user.client.ui.Composite.onAttach(Composite.java:162)
at com.google.gwt.user.client.ui.Widget.setParent(Widget.java:475)
at com.google.gwt.user.client.ui.Panel.adopt(Panel.java:127)
at com.google.gwt.user.client.ui.ComplexPanel.add(ComplexPanel.java:97)
at com.google.gwt.user.client.ui.AbsolutePanel.add(AbsolutePanel.java:97)
at org.AwardTracker.client.NavHandler.go(NavHandler.java:53)
at org.AwardTracker.client.SelectPersonView$ViewDataHandler$2.onClick(SelectPersonView.java:131)
at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:56)
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.GeneratedMethodAccessor28.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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:338)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
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:242)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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:293)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
at java.lang.Thread.run(Unknown Source)

最佳答案

请参阅http://forums.whirlpool.net.au/forum-replies.cfm?t=2265752一个答案。

简而言之,我: 删除了 NavHandler.java, 更改了 AwardTracker.java 以允许历史并删除对 NavHandler.java 的需要, 将新 View 调用更改为 History.newItem("selectPerson", true); 添加测试 if (event.isAttached()) 到 AttachHandler 和 将以下代码移至 AttachHandler - rpc = (DBConnectionAsync) GWT.create(DBConnection.class); ServiceDefTarget 目标 = (ServiceDefTarget) rpc; String moduleRelativeURL = GWT.getModuleBaseURL() + "MySQLConnection"; target.setServiceEntryPoint(moduleRelativeURL);

问候,

格林

关于java - 如何防止 View 在第一次调用后加载多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026969/

相关文章:

java - 如何编写java程序将html转换为xml

java - 使用反射设置对象属性

java - android帮助系统如何显示html文件

java - 需要MenuBar的MouseOutEvent来检测点击: GWT

java - 未找到 HTTP 请求与 URI 的映射

java - 在cmd行中使用mvn安装的Eclipse项目

eclipse - 如何在eclipse中创建用户字典?

java - "src"和有什么区别? "con"和 "output"

java - GWT:如何在两个模块之间共享java对象(即:EventBus)

java - 离线运行 GWT DevMode