在许多情况下,我有相同的面板,用于编辑不同DTO共有的一组属性。 所以我希望这个面板只定义一次并重复使用,所以我想出了以下一个实现:
public class IdentificationPanel<M> extends Panel implements Editor<M> {
BusinessUnitField businessUnit;
OperationCodeField operationCode;
OperationNumber operationNumber;
...........
}
所以我将使用不同DTO的IdentificationPanel,具体取决于我需要编辑的模型。 例如,我有:
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类,并且ExampleTrans02Header类是父类。
我知道我可以通过扩展IdentificationPanel解决问题,例如:
public class ExampleTrans01Identification extends IdentificationPanel<ExampleTrans01Header> {
// Nothing interesting to do here
}
public class ExampleTrans02Identification extends IdentificationPanel<ExampleTrans02Header> {
// Nothing interesting to do here
}
然后使用这个类而不是参数化,但是这个解决方案似乎有点讨厌,因为这些类没有任何其他用途。
所以问题是,有没有其他方法可以实现这种情况?我想知道这应该是一个非常常见的用例,但我找不到很多关于它的信息。
另一方面,我可能会说我是编辑框架的新手,所以也许我在解释错误的内容,如果你能把我放在正确的方向,我将不胜感激。
此致 丹尼尔
答案 0 :(得分:2)
这是一个已知问题,没有其他已知的解决方法。
http://code.google.com/p/google-web-toolkit/issues/detail?id=6016