首先,您应该考虑将动物类型选择与表格的其余部分分开,因为如果用户在输入某些数据后决定更改类型,则需要放弃某些条目。这可以通过将这部分表单渲染并使用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;
}
}
(接口跳过)
你可以采取AnimalModel从(同样构造)DogModel初始化您的CatModels'继承的'数据。
public class AnimalModel {
private int numLegs;
public int getNumLegs() {
return numLegs;
}
public void setNumLegs(int numLegs) {
this.numLegs = numLegs;
}
}
AnimalModel为了完整性......
您可以通过Ajaxifying它并使用onChange事件来切换形模型分开的形式存在,例如其余的动物类型选择一个符合所选类型(在需要的地方复制数据)... – Nicktar
没错。那将是另一种选择。虽然会有很多复制。但也许这是最好的解决方案。 – aioobe
如果你想为模型使用组合(比如CatModel和DogModel都包含AnimalModel和委托方法),你可以将“继承”部分移动... – Nicktar