如何使用自定义标记实现GWT PlaceHistoryMapper?

时间:2012-11-08 12:15:43

标签: java gwt gwt-places

我希望我的小型GWT应用程序具有以下所有“可收藏”Place s:

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

并拥有相应的标记符:

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

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

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

1 个答案:

答案 0 :(得分:4)

要么使用带有@WithTokenizers注释的接口,要让GWT从GWT.create(MyWebAppPlaceHistoryMapper.class)生成实现,要么手动实现PlaceHistoryMapper接口“,并且不需要{ {1}}秒。

使用PlaceTokenizer,GWT会将GWT.create()getPlace方法实施为调度到相应的getToken,具体取决于令牌的前缀(根据PlaceTokenizer s上的if…else注释或prefix.equals(...)的类型使用@Prefix级联PlaceTokenizer级联(使用{{1}基于Place s的泛型类型与if…else级联。