GWT:使用延迟绑定将AbstractPlaceHistoryMapper替换为自定义映射器

时间:2011-02-15 06:25:44

标签: gwt history gwt-history

看起来为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 个答案:

答案 0 :(得分:1)

要使延迟绑定工作,必须使用GWT.create()创建一个类。但是,AbstractPlaceHistoryMapper仅用作扩展类。因此它永远不会通过GWT.create创建,但总是通过实例化子类。因此,延迟绑定在这种情况下不起作用。如果您需要完全不同的实现,则必须实现自定义PlaceHistoryMapper,并自行管理已知令牌。这也意味着您也无法使用历史注释。

作为旁注,应该交换规则中的类名。但是最终的结果并不重要,因为它不会起作用。

答案 1 :(得分:0)

绝对有可能使用自定义历史记录令牌(例如。#mail#mail/bla而非#mail:inbox),使用与GWT相关的现成的与地点相关的类(2.0)提供。

您可以实例化AbstractPlaceHistoryMapperPlaceHistoryMapper的实现,而不是替换PlaceHistoryMapper<T>,您可以实例化默认PlaceHistoryMapperWithFactory<T>传递它的构造函数。

例如:

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

然后,您可以根据需要映射令牌。

我个人建议您在映射器自定义实现中使用唯一的PlaceTokenizer,这样我就不必在每个 Places PlaceTokenizer 类>

希望有所帮助。随意提出任何疑问。