2010-11-21 17 views
0

私はGWTの歴史を試しています。私はこのApprochが本当にうまく実装されていることを知ります。残念なことに、私のコードは動作しません。GWT - なぜこの履歴は機能しませんか?

この私の実際のコード:私は#apartmentをロードしようとすると

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; 
    } 
} 

は、私が手:

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 - 私はよく理解していれば、私はHistory.newItemを使用するときに()私はonValueChange()を呼び出しますか?では、なぜうまくいかなかったのですか?

2 - クラス履歴は静的ですか?だから私はいつでもそれを渡す必要はありません。私のアプリケーションのコンテストでそれを呼び出すことはできますか?あなたのchangePageの

+0

何が問題なのですか?あなたはHistory.addValueChangeHandlerを呼び出し、それをあなたのProfileウィジェットに渡しましたか? –

+0

ああ申し訳ありません...私は少し疲れています!コードをコピーして貼り付けるのは間違っています(もう一つの例でした)。今私は右のものとトピックを更新しました:) – markzzz

答えて

1

()メソッドは、引数からトークン変数を使用してみてください:

ます。public void changePage(文字列トークン)
{
場合( "アパート" .equals(トークン)){... 。}
else {...}

この例外はどこで発生しましたか? (コード行..)

+0

は、全体のエラーコードを追加:)あなたの助けをありがとう! – markzzz

+0

ああ、まあ、私はばかです:)アパートのエラーでしたか... – markzzz

+0

よく、そうです... Apartment.javaのチェコのライン24あなたはおそらく答えを得るでしょう:) – Diogo

関連する問題