2011-02-15 40 views
0

对于为PlaceHistoryMapper生成的类进行硬编码以使用AbstractPlaceHistoryMapper作为超类,看起来像是这样。GWT:使用延迟绑定将自定义映射器替换为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组,但迄今没有收到答案。

+0

我认为希尔布兰德的回答是正确的。 GWT.create(X)表示只有'X'通过“延迟绑定”。如果生成的类'X'扩展了任何类,它们(扩展类)将不会通过“延迟绑定”进程。 – 2011-02-15 23:02:51

回答

1

要使延迟绑定工作,必须使用GWT.create()创建一个类。但是,AbstractPlaceHistoryMapper仅用作扩展类。所以它永远不会通过GWT.create创建,但始终通过实例化子类。因此延迟绑定在这种情况下不起作用。如果你想要一个完全不同的实现,你必须实现一个自定义PlaceHistoryMapper,并自己管理已知的标记。这也意味着你也不能使用历史注释。

作为一个方面说明你的规则中的类名应该交换。但是最终的结果并不重要,因为它首先不起作用。

0

这是绝对可能有自定义的历史标记使用外的开箱地点相关类,GWT(2.0)提供(例如#mail#mail/bla而不是只有#mail:inbox)。

而不是替换AbstractPlaceHistoryMapper你可以实例化默认PlaceHistoryMapper传入它的构造函数你的实现PlaceHistoryMapper<T>PlaceHistoryMapperWithFactory<T>

例如:

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

您可以再为您要映射的令牌。

我个人建议你在你映射器定制的实施,使我不必在每个地方PlaceTokenizer类使用独特PlaceTokenizer

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