2012-05-07 89 views
0

在很多情況下,我有相同的面板編輯一組屬性,這些屬性是不同的DTO共有的。 所以我想有這樣的面板只定義一次和重用,所以我想出了以下實施其中之一:GWT編輯器框架,如何實現編輯器的有效重用

public class IdentificationPanel<M> extends Panel implements Editor<M> { 

    BusinessUnitField businessUnit; 

    OperationCodeField operationCode; 

    OperationNumber operationNumber; 

    ........... 
} 

所以我會用IdentificationPanel與根據我需要的型號不同的DTO編輯。 比如我有:

public class ExampleTrans01 extends ModelDTO { 

    private ExampleTrans01Header header; 

    ....... 
} 

public class ExampleTrans02 extends ModelDTO { 

    private ExampleTrans02Header header; 

    ..... 
} 

public class ExampleTrans01Header extends ModelDTO { 
    private Integer businessUnit; 

    private String operationCode; 

    private Long operationNumber; 

    ....... 
    // Setters & Getters 
} 

public class ExampleTrans02Header extends ModelDTO { 
    private Integer businessUnit; 

    private String operationCode; 

    private Long operationNumber; 

    ....... 
    // Setters & Getters 
} 

所以編輯爲2班,我需要編輯的實施,我將有:

public class ExampleTrans01Editor extends Panel implements Editor<ExampleTrans01> { 

    @Path("header") 
    IdentificationPanel<ExampleTrans01Header> identification; 

    ....... 
} 

public class ExampleTrans02Editor extends Panel implements Editor<ExampleTrans02> { 

    @Path("header") 
    IdentificationPanel<ExampleTrans02Header> identification; 

    ........ 
} 

當我嘗試編譯此,GWT抱怨,因爲它說當IdentificationPanel_businessUnit_Context類生成Delegate時,沒有類ExampleTrans02Header作爲父類的構造函數。

我知道我也許擺脫問題通過擴展IdentificationPanel,如:

public class ExampleTrans01Identification extends IdentificationPanel<ExampleTrans01Header> { 
    // Nothing interesting to do here 
} 

public class ExampleTrans02Identification extends IdentificationPanel<ExampleTrans02Header> { 
    // Nothing interesting to do here 
} 

然後使用這個類來代替參數,但是這種解決方案似乎是有點討厭,因爲這些類不會有任何其他用途。

所以問題是,有沒有其他的方式來實現這種情況?我想知道這應該是一個非常常見的用例,但我無法找到關於它的更多信息。

在旁註中,我可能會說我是編輯器框架的新手,所以也許我正在解釋錯誤的東西,如果能讓我走向正確的方向,我會很感激。

問候, 丹尼爾

回答