在使用Grails时,我喜欢尽可能依靠自动数据绑定和脚手架.我有以下问题.我有一个域类Flow,它有一个Domain类Node实例的集合,是最新的一个抽象类:
class Flow {
List nodes
static hasMany = [ nodes: Node]
static constraints = { nodes minSize:1 }
}
abstract class Node {
String title
static belongsTo = [ ownerFlow: Flow]
}
Run Code Online (Sandbox Code Playgroud)
有几个类继承自Node.尝试使用数据绑定创建Flow时,以下集成测试失败:
void "a flow can be created from a single request using the default grails data binding"() {
when:
def controller = new FlowController()
controller.request.addParameters(['nodes[0].title': 'First step'])
new Flow(controller.params).save(flush:true)
then:
Flow.count() > 0
}
}
Run Code Online (Sandbox Code Playgroud)
当我将Node从抽象更改为非抽象时,测试通过.它完全有道理,因为Grails无法创建node [0]实例,因为Node是一个抽象类,但问题是:
技术上是完全可能的(实际上Grails已经做了类似的事情,通过使用classname列来持久化和检索实例),但我不确定数据绑定中是否已经考虑过这种情况.如果不:
您需要为绑定目的配置默认值:
List nodes = [].withDefault { new MyConcreteNode() }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
458 次 |
| 最近记录: |