2011-02-15 24 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

希望有所幫助。隨意問任何疑問。