0

PlaceHistoryMapper 用に生成されたクラスは、AbstractPlaceHistoryMapper をスーパー クラスとして使用するようにハードコーディングされているようです。

したがって、この AbstractPlaceHistoryMapper を deferred binding を使用して私のカスタムマッパーに置き換えようとすることで、これを回避しようとしています。*.gwt.xml で次のルールを使用しています。

<replace-with class="com.google.gwt.place.impl.AbstractPlaceHistoryMapper">
   <when-type-is class="com.test.sampleapp.CustomPlaceHistoryMapper" />
</replace-with>

しかし、何らかの理由で置換が行われていないようです。CustomPlaceHistoryMapper は起動されず、生成されたクラスは引き続き AbstractPlaceHistoryMapper を使用します。

この動作の結果となる可能性のあるものについての考え/指針は大歓迎です。

注: これは GWT グループにも投稿しましたが、まだ回答がありません。

4

2 に答える 2

1

遅延バインディングを機能させるには、クラスを で作成する必要がありますGWT.create()。ただし、 AbstractPlaceHistoryMapper拡張クラスとしてのみ使用されます。したがって、GWT.create によって作成されることはありませんが、常にサブクラスのインスタンス化によって作成されます。したがって、この場合、遅延バインディングは機能しません。完全に異なる実装が必要な場合は、カスタムを実装しPlaceHistoryMapper、既知のトークンを自分で管理する必要があります。これは、履歴注釈も使用できないことも意味します。

補足として、ルールのクラス名を交換する必要があります。しかし、最終的な結果としては、これは問題ではありません。そもそもうまくいかないからです。

于 2011-02-15T08:14:52.300 に答える
0

GWT (2.0) が提供するすぐに使用できる場所関連のクラスを使用して、カスタムの履歴トークン (たとえば、 のみの代わりに) を持つことは絶対に可能#mailです#mail/bla#mail:inbox

置き換える代わりに、またはの実装をコンストラクターに渡すAbstractPlaceHistoryMapperデフォルトをインスタンス化できます。PlaceHistoryMapperPlaceHistoryMapper<T>PlaceHistoryMapperWithFactory<T>

例えば。:

final PlaceHistoryHandler placeHistoryHandler = new PlaceHistoryHandler(new CustomHistoryMapper());

その後、必要に応じてトークンをマッピングできます。

Placesごとに内部のPlaceTokenizerクラスPlaceTokenizerを持たなくて済むように、独自のマッパー カスタム実装を使用することを個人的にお勧めします。

それが役立つことを願っています。ご不明な点はお気軽にお尋ねください。

于 2011-02-23T13:27:45.503 に答える