Frage

Ich bin versucht, die Geschichte auf GWT. Ich finde diesen approch wirklich schön zu implementieren. Leider, mein Code funktioniert nicht.

Das ist mein eigentlicher Code:

public class PageLoader implements EntryPoint, ValueChangeHandler<String> {
    private FlowPanel pageloader;
    private GWTServiceAsync rpcService;

    public void onModuleLoad() {
        pageloader=new FlowPanel();
        rpcService=GWT.create(GWTService.class);
        pageloader.add(new HomepageContext(rpcService));
        RootPanel.get().add(pageloader);

        History.addValueChangeHandler(this);
        if(!History.getToken().isEmpty()){
            changePage(History.getToken());
        }
    }

    public void onValueChange(ValueChangeEvent event) {
        changePage(History.getToken());
    }

    public void changePage(String token) {
        if(History.getToken().equals("apartment")) {
            pageloader.clear();
            pageloader.add(new ApartmentContext(rpcService));
        } else {
            pageloader.clear();
            pageloader.add(new HomepageContext(rpcService));
        }
    }
}

############################################################

public class ApartmentContext extends Index {
    public ApartmentContext(GWTServiceAsync rpcService) {
        super(rpcService);
        this.getContent().add(new Apartment());
    }
}    

public class Apartment extends FlowPanel {
    // somethings
}

############################################################

public class Index extends FlowPanel {
    private Center center;
    public Index(GWTServiceAsync rpcService) {
        this.center=new Center(rpcService);
        this.add(center);
   }
   public FlowPanel getContent() {
       return center.getContent();
   }
} 

############################################################

public class Center extends FlowPanel {
    private Menu menu;
    private Content content;

    public Center(GWTServiceAsync rpcService) {
       this.content=new Content();
       this.menu=new Menu(rpcService, this);

       this.add(menu);
       this.add(content);
    }

    public Content getContent() {
        return this.content;
    }
}  

Wenn ich auf Last #apartment versuchen, erhalte ich:

01:19:45,112 [ERROR] Uncaught exception escaped
java.lang.NullPointerException: null    
at org.sinfonet.client.apartment.Apartment.<init>(Apartment.java:24)    
at org.sinfonet.client.context.ApartmentContext.<init>(ApartmentContext.java:14)    
at org.sinfonet.client.PageLoader.changePage(PageLoader.java:36)    
at org.sinfonet.client.PageLoader.onValueChange(PageLoader.java:30)     
at com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:128)     
at com.google.gwt.event.logical.shared.ValueChangeEvent.dispatch(ValueChangeEvent.java:1)   
at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.fireEvent(HandlerManager.java:65)     
at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access$1(HandlerManager.java:53)  
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:178)    
at com.google.gwt.user.client.impl.HistoryImpl.fireEvent(HistoryImpl.java:74)   
at com.google.gwt.event.logical.shared.ValueChangeEvent.fire(ValueChangeEvent.java:43)  
at com.google.gwt.user.client.impl.HistoryImpl.fireHistoryChangedImpl(HistoryImpl.java:81)  
at com.google.gwt.user.client.impl.HistoryImpl.newItem(HistoryImpl.java:118)    
at com.google.gwt.user.client.History.newItem(History.java:173)     
at com.google.gwt.user.client.History.newItem(History.java:156)     
at com.google.gwt.user.client.ui.Hyperlink.onBrowserEvent(Hyperlink.java:163)   
at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1307)  
at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1263)  
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:157)    
at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1714)   
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)    
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)    
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)  
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)    
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:188)   
at sun.reflect.GeneratedMethodAccessor131.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:157)    
at com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:1669)    
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401)   
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)     
at java.lang.Thread.run(Thread.java:619)

1 - Wenn ich gut verstehen, wenn ich History.newItem () verwenden, ich nenne das onValueChange () richtig? Warum also nicht?

2 - Die Klasse Geschichte statisch ist? Also ich muss es keine Zeit verstreichen; und ich kann es in jedem Wettbewerb meiner Bewerbung nennen?

War es hilfreich?

Lösung

auf change () -Methode, versuchen Sie die Token-Variable aus dem Argument:

public void change (String Token)
{
  if ( "Wohnung" .equals (Token)) {...}
  else {...}
}

nur knapp sein Ziel bemerkt man eine Ausnahme hatte ... wo hat diese Ausnahme geschehen? (Code line ..)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top