GWT несколько видов деятельности / мест с одним токеном
У моего сайта слева GWT-дерево. В центре находится GWT-TabBar.
Обе части реализованы как виды / виды деятельности / места. У меня есть два токенизатора: "m" для дерева и "t" для вкладок.
Если я посещаю одно место (goTo()
) только это место будет использоваться для создания токена истории. Но я хотел бы увидеть это:<page>#m:sub/sub/sub;t:map
Я на самом деле думал, что дыра идея деятельности и места. Я не вижу смысла иметь несколько токенизаторов, когда только один токенизатор может предоставить токен одновременно.
1 ответ
Вы не можете отображать два разных токена #m: и #t: одновременно, поскольку вы не можете находиться в двух местах одновременно.
Таким образом, если обе вкладки и дерево отображаются одновременно, то состояние обеих должно быть сохранено одновременно в одном и том же месте.
Это более или менее то, что вам нужно.
public class ExamplePlace extends Place {
public String treePosition = "/";
public int tabIndex = 0;
public ExamplePlace() {
super();
}
public ExamplePlace(String treePosition, int tabIndex) {
this.treePosition = treePosition;
this.tabIndex = tabIndex;
}
@Prefix("overview")
public static class Tokenizer implements PlaceTokenizer<ExamplePlace> {
/**
* parse token to get state
*
*/
@Override
public ExamplePlace getPlace(String token) {
String treePosition = "";
int tabIndex = 0;
String[] states = token.split(";");
for (String state : states) {
String[] mapping = state.split("=");
if (mapping.length == 2) {
if ("t".equals(mapping[0])) {
treePosition = mapping[1];
}
if ("m".equals(mapping[0])) {
try {
tabIndex = Integer.valueOf(mapping[1]);
} catch (Throwable e) {
}
}
}
}
return new ExamplePlace(treePosition, tabIndex);
}
/**
* store state in token
*
*/
@Override
public String getToken(ExamplePlace place) {
StringBuffer sb = new StringBuffer();
if (place.getTreePosition()!=null) {
sb.append("t").append("=").append(place.getTreePosition());
sb.append(";");
}
sb.append("m=").append(place.getTabIndex());
return sb.toString();
}
}
public String getTreePosition() {
return treePosition;
}
public void setTreePosition(String treePosition) {
this.treePosition = treePosition;
}
public int getTabIndex() {
return tabIndex;
}
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}
}
Это даст вам URL, которые выглядят как;
Обзор index.html#: т =/ поддерево / поддерево / лист; т =2
Вы можете столкнуться с проблемами с косыми чертами в токене, не уверен. При необходимости измените их на другой символ;
Деятельность получает входящее место и вводит состояние в представление;