首先,您應該考慮將動物類型選擇與表格的其餘部分分開,因爲如果用戶在輸入某些數據後決定更改類型,則需要放棄某些條目。這可以通過將這部分表單渲染並使用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