Grails 命令对象中抽象类集合的自定义数据绑定

Grails 命令对象中抽象类集合的自定义数据绑定,grails,Grails,在Grails 3.x项目中,我有一个命令对象,HabitatCommand,它有一个参数化的动物集合: class HabitatCommand { Set<Animal> animals = [] } 如果我们只是从现有的动物中选择并提交它们的ID(就像您从下拉列表中所做的那样),我相信数据绑定可以很好地工作,但是在尝试在表单中创建新的动物实例时会出现问题。采用以下表格数据: animals[0].name: 'animal1' animals[0].height: 4

在Grails 3.x项目中,我有一个命令对象,
HabitatCommand
,它有一个参数化的动物集合:

class HabitatCommand {
    Set<Animal> animals = []
}
如果我们只是从现有的动物中选择并提交它们的ID(就像您从下拉列表中所做的那样),我相信数据绑定可以很好地工作,但是在尝试在表单中创建新的动物实例时会出现问题。采用以下表格数据:

animals[0].name: 'animal1'
animals[0].height: 4
animals[0].weight: 75
animals[0].wingspan: 7
animals[1].name: 'animal2'
animals[1].height: 3
animals[1].weight: 45
animals[1].lives: 9
发生数据绑定时,Grails在每个
animals[i]
索引表单属性上循环,并尝试创建参数化类型的新实例,在本例中为
Animal
。这不起作用,因为Animal是一个抽象类,我希望能够自定义该功能,根据请求参数创建正确的具体Animal实例,例如,如果存在
wingspan
属性,我们希望创建
Bird
的实例

换句话说,在创建每个动物实例时,如何连接到数据绑定过程以指定要使用的具体类

这可能吗?我尝试过使用一个自定义setter,
[]。使用默认的{}
@bindsuising
,和一个自定义的
值转换器
,但我认为这些都不适用于这个场景,而且这些解决方案都没有被调用过

animals[0].name: 'animal1'
animals[0].height: 4
animals[0].weight: 75
animals[0].wingspan: 7
animals[1].name: 'animal2'
animals[1].height: 3
animals[1].weight: 45
animals[1].lives: 9