2012-11-08 5 views
4

:사용자 정의 토큰을 사용하여 GWT PlaceHistoryMapper를 구현하는 방법은 무엇입니까? 나는 다음과 같은 "북마크 된"<code>Place</code>의 모두가 내 작은 GWT 응용 프로그램을 싶습니다

http://www.mywebapp.com     -->  "home page" 
http://www.mywebapp.com/login   -->  login screen 
http://www.mywebapp.com/main   -->  main menu, after logged in 
http://www.mywebapp.com/start   -->  start of a transactional process 
http://www.mywebapp.com/complete  -->  end of transactional process (receipt) 

그래서 내가 나서서 5 개 Place 서브 클래스를 만들었을 모두 다음과 같은 형태로 취

public class LoginPlace extends Place { 
    // Intentionally left void because I'm not sure 
    // what to implement here... 
} 

그리고이 해당 tokenizers :

public class LoginPlaceTokenizer extends PlaceTokenizer<LoginPlace> { 
    @Override 
    public LoginPlace getPlace(String token) { 
     // ??? 
    } 

    @Override 
    public String getToken(LoginPlace place) { 
     // ??? 
    } 
} 

나는 내 AP에 대한 PlaceHistoryMapper을 구현하기 위해 노력하고있어 P 다음 PlaceTokenizer<T> 서브 클래스와 MyWebAppPlaceHistoryMapper에서

@WithTokenizers({ 
    HomePlaceTokenizer.class, 
    LoginPlaceTokenizer.class, 
    MainMenuPlaceTokenizer.class 
    // etc. 
}) 
public class MyWebAppPlaceHistoryMapper implements PlaceHistoryMapper { 
    @Override 
    public Place getPlace(String token) { 
     // ??? 
    } 

    @Override 
    public String getToken(Place place) { 
     // ??? 
    } 
} 

동반자 getPlace/getToken 방법은 같은 일을하고있는 것 같다. 그들입니까? 그렇다면 양쪽 모두에서 동일한 코드를 사용합니까? 그것들이 동일하지 않다면 어떻게 다릅니 까? 어떻게 구현해야합니까?

GWT의 기본값 인 someDisplay:SomePlace 토큰을 사용하지 않으려는 앱의 북마크 할 수있는 곳으로 원하는 URL 토큰을 기억하십시오. 미리 감사드립니다!

답변

4

은 어느 당신은 @WithTokenizers 주석 인터페이스를 사용하여 GWT는 GWT.create(MyWebAppPlaceHistoryMapper.class)에서 구현을 생성 할 수 있습니다, 또는 당신은 "손으로"를 PlaceHistoryMapper 인터페이스를 구현하고 PlaceTokenizer들 필요가 없습니다. GWT.create() 함께

는 GWT합니다 (PlaceTokenizer S의 @Prefix 통계에 기초 prefix.equals(...)if…else 캐스케이드를 사용하여) 토큰의 접두어에 따라 적절한 PlaceTokenizer디스패치getPlacegetToken 방법을 구현하거나 할 의 일반 유형을 기준으로 instanceof과 함께 if…else 캐스케이드를 사용하는 Place 유형).

+0

감사합니다. @Thomas Broyer (+1) - 그건 의미가 있습니다. 토큰을 커스터마이징 할 때,''getToken (Place place)'메소드를 어떻게 구현하여'/ login'의 토큰이'http : //www.mywebapp에 북마크 된'LoginPlace'에 대한 토큰이되도록할까요? .com/login'? ** 다시 한 번 감사드립니다! –

+1

'if (instanceof LoginPlace) {return "login"; }','getPlace'와 마찬가지로 : if ("login".equals (token)) {return new LoginPlace(); }'. 그러나'http : // www.mywebapp.com/login'을 사용하는 것은 HTML5'pushState'와'popstate'를 사용하고 서버가 많은 URL을 위해 같은 페이지를 보낼 준비가 필요합니다; https://gist.github.com/1883821 –

+0

감사합니다. 나는 그것을 조사 할 것이다. HTML5 pushState/popState와 'Html5Historian'에 관한 더 깊은 질문은이 질문과 관련이 없으므로 자제하겠습니다. 그러나 (1) HTML5와 호환되는 최신 브라우저에서 웹 앱 사용자를 제한 할 것입니다. ? 그리고 (2) HTML5 pushState/popState가 필요한 이유에 대한 문서가 있습니까? 나는 이것이 GWT의 다른 장소에 북 마킹하는 정상적인 방법이 아니라는 것에 놀랍니다. 언제나처럼, 고마워! –