所以我有一个,比方说,Pet
抽象类,以及它的三个具体实现——比方说Cat
、Dog
和Bird
。正如具体的类所做的那样,这些家伙共享共同的领域,也有独特的领域——例如,他们都有Legs
,但只有 Birds 才有Wings
。因此,GSP 不同,更新方法不同,等等。
诀窍是我需要能够在单个操作中实例化、验证和持久化不确定数量的实例。一个简单的实现基本上如下:
创建.gsp
Cat Hair Color: <g:textField name="catInstance.hairColor"/>
Dog Hair Color: <g:textField name="dogInstance.hairColor"/>
Bird Feather Color: <g:textField name="birdInstance.featherColor"/>
PetCommand.groovy
class PetCommand {
Cat catInstance
Dog dogInstance
Bird birdInstance
}
PetController.groovy
def save(PetCommand cmd) {
def catInstance = cmd.catInstance
def dogInstance = cmd.dogInstance
def birdInstance = cmd.birdInstance
/* do stuff */
}
当然,在实际应用程序中,这会变得更加混乱,这完全违背了使用抽象类的目的。
有什么方法可以Pet
一次性绑定多个实例,然后循环遍历它们,例如,传入参数进行更新?我不知道,这整件事很混乱。
命令对象并不是绝对必要的,但它们解决了 Grails 控制器的许多烦人的冗余问题。