我希望我的小型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) {
// ???
}
}
PlaceTokenizer<T>
子类中的伴随getPlace
/getToken
方法似乎正在做同一件事。是吗?如果是,我是否只使用两个内部的代码?如果它们不一样,它们有何不同,我应该如何实施它们?
请记住,我想要的URL令牌是该应用程序中的书签 - 我不想使用GWT的默认someDisplay:SomePlace
令牌。预先感谢!
您要么使用带有@WithTokenizers
注释的接口,然后让GWT从GWT.create(MyWebAppPlaceHistoryMapper.class)
生成实现,或者您可以"手动"实现PlaceHistoryMapper
接口,并且不需要PlaceTokenizer
s。p>使用GWT.create()
,GWT将根据令牌的前缀(使用if…else
CASCADE,基于@Prefix
的CC_19 NENTICATION,基于CC_19 NENTANE,CC_19 NENTICTION, CC_17 cascade of CC_19 NENTICATION cC_19 CC_19S)或Place
的类型(使用instanceof
的if…else
级联,基于PlaceTokenizer
s的通用类型)。