4

我希望我的小型 GWT 应用程序具有以下所有“书签” Place

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)

所以我继续创建了 5Place个子类,所有这些子类都采用以下形式:

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

并有相应的分词器:

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

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

我正在尝试PlaceHistoryMapper为我的应用程序实现一个:

@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) {
        // ???
    }
}

子类和 in中的伴侣getPlace/getToken方法似乎在做同样的事情。他们是吗?如果是这样,我是否只在它们内部使用相同的代码?如果它们不相同,它们有何不同,我应该如何实施它们?PlaceTokenizer<T>MyWebAppPlaceHistoryMapper

请记住我希望在应用程序中作为可收藏位置的 URL 令牌 - 我不想使用 GWT 的默认someDisplay:SomePlace令牌。提前致谢!

4

1 回答 1

4

您可以使用带有注释的接口@WithTokenizers并让 GWT 从 a 生成实现GWT.create(MyWebAppPlaceHistoryMapper.class),或者您PlaceHistoryMapper“手动”实现接口并且不需要PlaceTokenizers。

使用GWT.create(),GWT 将实现getPlacegetToken方法,以根据令牌的前缀(使用与 的级联,基于 s 上的注释)或类型(使用与 的级联,基于泛型类型)进行分派的s)。PlaceTokenizerif…elseprefix.equals(...)@PrefixPlaceTokenizerPlaceif…elseinstanceofPlaceTokenizer

于 2012-11-08T15:12:54.657 回答