我的站点在左侧有一个 GWT-Tree。中间是一个 GWT-TabBar。
这两部分都实现为Views/Activity/Places。我有两个标记器:树的“m”和选项卡的“t”。
如果我访问一个地方 ( goTo()
),只有这个地方将用于生成历史令牌。但我想看到这个:<page>#m:sub/sub/sub;t:map
我实际上认为活动和场所的想法。当只有一个标记器可以一次提供一个标记时,我看不出有多个标记器的意义。
我的站点在左侧有一个 GWT-Tree。中间是一个 GWT-TabBar。
这两部分都实现为Views/Activity/Places。我有两个标记器:树的“m”和选项卡的“t”。
如果我访问一个地方 ( goTo()
),只有这个地方将用于生成历史令牌。但我想看到这个:<page>#m:sub/sub/sub;t:map
我实际上认为活动和场所的想法。当只有一个标记器可以一次提供一个标记时,我看不出有多个标记器的意义。
您不能同时显示两个不同的标记 #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#overview:t=/subtree/subtree/leaf;m=2
您可能会遇到令牌中的正斜杠的问题,不确定。如有必要,将它们更改为其他字符;
Activity接收传入的地方并将状态注入到视图中;