GWT多个活动/具有一个令牌的地方

时间:2012-04-26 18:33:39

标签: gwt history gwt-mvp gwt-history

我的网站左侧有一个GWT树。在中心是一个GWT-TabBar。

这两个部分都实现为Views/Activities/Places。我有两个标记化器:树的“m”和标签的“t”。

如果我访问一个地方(goTo()),则只会使用此地点生成历史记录代币。 但我希望看到这一点:<page>#m:sub/sub/sub;t:map

我实际上认为活动和地方的洞想法。当只有一个标记生成器可以同时提供标记时,我没有看到有多个标记化器的意义。

1 个答案:

答案 0 :(得分:3)

你不能同时显示两个不同的标记#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;
    }

}

这会为您提供类似的网址;

  

的index.html#概述:T = /子树/子树/叶; m = 2的

您可能在令牌中使用正斜杠遇到麻烦,但不确定。如有必要,将它们更改为其他角色;

活动接收传入的地方并将状态注入视图;