首先,您应该考虑将动物类型选择与表单的其余部分分开,因为如果用户在输入一些数据后决定更改类型,您将需要丢弃一些条目。这可以通过 ajaxifying 表单的这一部分并使用 onChange 事件来清理数据和切换模型来实现。
当您这样做时,您可能需要考虑从继承切换到组合以避免复制数据。我不知道这是否仍然与您的持久性策略兼容,但您始终可以将完成的数据复制到您的持久性层。
例如,当您的 CatModel 不是从 AnimalModel 继承而是包含这样的 AnimalModel 时:
public class CatModel {
private final AnimalModel parent;
private String meowingSound;
public CatModel(AnimalModel parent) {
this.parent = parent;
}
public int getNumLegs() {
return parent.getNumLegs();
}
public void setNumLegs(int numLegs) {
parent.setNumLegs(numLegs);
}
public String getMeowingSound() {
return meowingSound;
}
public void setMeowingSound(String meowingSound) {
this.meowingSound = meowingSound;
}
public AnimalModel getParent() {
return parent;
}
}
(跳过的接口)
您可以从(同样构造的)DogModel 中获取 AnimalModel 来初始化您的 CatModels“继承”数据。
public class AnimalModel {
private int numLegs;
public int getNumLegs() {
return numLegs;
}
public void setNumLegs(int numLegs) {
this.numLegs = numLegs;
}
}
AnimalModel 的完整性...