4

私の小さな GWT アプリには、次の「ブックマーク可能な」すべてのPlaces が必要です。

http://www.mywebapp.com                 -->     "home page"
http://www.mywebapp.com/login           -->     login screen
http://www.mywebapp.com/main            -->     main menu, after logged in
http://www.mywebapp.com/start           -->     start of a transactional process
http://www.mywebapp.com/complete        -->     end of transactional process (receipt)

そこで、先に進んで 5 つPlaceのサブクラスを作成しました。これらはすべて次の形式を取ります。

public class LoginPlace extends Place {
    // Intentionally left void because I'm not sure
    // what to implement here...
}

対応するトークナイザーがあります。

public class LoginPlaceTokenizer extends PlaceTokenizer<LoginPlace> {
    @Override
    public LoginPlace getPlace(String token) {
        // ???
    }

    @Override
    public String getToken(LoginPlace place) {
        // ???
    }
}

アプリに を実装しようとしてPlaceHistoryMapperいます:

@WithTokenizers({
    HomePlaceTokenizer.class,
    LoginPlaceTokenizer.class,
    MainMenuPlaceTokenizer.class
    // etc.
})
public class MyWebAppPlaceHistoryMapper implements PlaceHistoryMapper {
    @Override
    public Place getPlace(String token) {
        // ???
    }

    @Override
    public String getToken(Place place) {
        // ???
    }
}

サブクラスとサブクラスのコンパニオンgetPlace/getTokenメソッドは同じことをしているようです。彼らは?もしそうなら、私はそれらの両方で同じコードを使用するだけですか? それらが同じでない場合、それらはどのように異なり、どのように実装する必要がありますか?PlaceTokenizer<T>MyWebAppPlaceHistoryMapper

someDisplay:SomePlaceアプリのブックマーク可能な場所として必要な URL トークンを覚えておいてください。GWT のデフォルトトークンは使用したくありません。前もって感謝します!

4

1 に答える 1

4

で注釈が付けられたインターフェースを使用して@WithTokenizers、GWT に から実装を生成させるGWT.create(MyWebAppPlaceHistoryMapper.class)か、PlaceHistoryMapperインターフェースを「手動で」実装して を必要としませんPlaceTokenizer

を使用GWT.create()すると、GWT はgetPlaceおよびgetTokenメソッドを実装して、トークンのプレフィックス (の注釈に基づいて とのカスケードを使用) または の型(ジェネリック型に基づいて とのカスケードを使用) に応じて、適切なにディスパッチします。の)。PlaceTokenizerif…elseprefix.equals(...)@PrefixPlaceTokenizerPlaceif…elseinstanceofPlaceTokenizer

于 2012-11-08T15:12:54.657 に答える