0

私のサイトの左側にはGWTツリーがあります。中央にはGWT-TabBarがあります。

両方の部分は、ビュー/アクティビティ/場所として実装されます。2つのトークナイザーがあります。ツリーの「m」とタブの「t」です。

1つの場所()にアクセスgoTo()すると、この場所のみが履歴トークンの生成に使用されます。しかし、私はこれを見たいです:<page>#m:sub/sub/sub;t:map

私は実際に活動と場所の穴のアイデアを考えました。一度に1つのトークナイザーしかトークンを提供できない場合、複数のトークナイザーを使用する意味がわかりません。

4

1 に答える 1

3

2つの異なるトークン#m:と#t:を同時に表示することはできません。同時に、2つの場所にいることはできません。

したがって、タブとツリーの両方が同時に表示されている場合は、両方の状態を同時に同じ場所に保存する必要があります。

これは多かれ少なかれあなたが必要とするものです。

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

トークンのスラッシュで問題が発生する可能性がありますが、よくわかりません。必要に応じて、他の文字に変更してください。

アクティビティは着信場所を受け取り、状態をビューに挿入します。

于 2012-04-26T22:18:09.767 に答える