2012-04-26 9 views
0

個人用サイトには、左側にGWTツリーがあります。中央にはGWT-TabBarがあります。GWT複数のアクティビティ/ 1つのトークンを持つ場所

両方の部分がViews/Activities/Placesとして実装されています。私は2つのトークナイザを持っています:ツリーの "m"とタブの "t"。

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

は、私が実際に考えたその活動&場所の穴のアイデア。一人のトークナイザだけが一度にトークンを提供することができるとき、私は複数のトークナイザを持っているとは思わない。

答えて

3

#m:と#tの2つのトークンを同時に表示することはできません。同時に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#概要:T = /サブツリー/サブツリー/葉;前方がトークンには、わからないスラッシュでmは= 2

あなたはトラブルに実行される場合があります。必要に応じてそれらを他の文字に変更します。

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

+0

ハム、私はこれが唯一の解決策であることを恐れる!私はGWT-「活動/場所」を見つける前に、偶然に(ただし複数の「場所」で)比較可能なアプローチを実装します。 何でも。今私はドキュメントで何かを見逃していないことを知っています!ありがとう。 –

+0

重要なことは、一度に複数の場所に表示することはできず、個別のアクティビティによって管理される複数の表示領域のみです。その場所はどの活動が活性化されるかを決定する。 – koma

関連する問題