GWT: замените AbstractPlaceHistoryMapper пользовательским сопоставителем, используя отложенное связывание - PullRequest
0 голосов
/ 15 февраля 2011

Похоже, что класс, сгенерированный для PlaceHistoryMapper, жестко запрограммирован для использования AbstractPlaceHistoryMapper в качестве суперкласса.

Итак, я пытаюсь обойти эту проблему, пытаясь заменить этот AbstractPlaceHistoryMapper моим пользовательским сопоставителем, используя отложенное связывание. Я использую следующее правило в моем * .gwt.xml:

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

Но почему-то замена не происходит. CustomPlaceHistoryMapper не запускается, и сгенерированный класс по-прежнему использует AbstractPlaceHistoryMapper.

Любые мысли / указатели относительно того, что может привести к такому поведению, очень ценятся.

Примечание: я также разместил это в группе GWT, но пока не получил ответа.

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

Чтобы заставить работать отложенное связывание, класс должен быть создан с GWT.create(). Однако AbstractPlaceHistoryMapper используется только как расширенный класс. Так что он никогда не будет создан с помощью GWT.create, но всегда путем создания экземпляра подкласса. И поэтому отложенное связывание не будет работать в этом случае. Если вам нужна совершенно другая реализация, вам нужно реализовать пользовательский PlaceHistoryMapper и самостоятельно управлять известными токенами. Это также означает, что вы также не можете использовать аннотации истории.

В качестве примечания следует поменять имена классов в вашем правиле. Но для конечного результата это не имеет значения, так как оно не сработает.

0 голосов
/ 23 февраля 2011

Абсолютно возможно иметь собственные токены истории (например, #mail или #mail/bla вместо только #mail:inbox), используя готовые классы, связанные с Place, которые предоставляет GWT (2.0).

Вместо замены AbstractPlaceHistoryMapper вы можете создать экземпляр PlaceHistoryMapper по умолчанию, передав в свой конструктор реализацию PlaceHistoryMapper<T> или PlaceHistoryMapperWithFactory<T>.

, например:

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

После этого вы сможете отображать токены по своему желанию.

Я лично рекомендую вам использовать уникальную PlaceTokenizer в вашей пользовательской реализации mapper, чтобы у меня не было внутреннего PlaceTokenizer класс в каждом из ваших мест .

Надеюсь, что это поможет.Не стесняйтесь задавать любые сомнения.

...