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