我希望我的小型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
令牌。提前谢谢!
答案 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
级联。