我很难解决这个验证问题。我有一个父域类定义如下:
class Person {
String fullName
List telephones = []
static hasMany = [telephones : Telephone]
static constraints = {
fullName(size:3..50, blank:false, nullable:false)
}
}
然后是一个sublcass:
class SalesAdvisor extends Person{
Float comission //In percentage
Portfolio customerPortfolio
Inventory inventory
static constraints = {
comission(range:0..100, scale:2, nullable:false)
customerPortfolio(nullable:false)
inventory(nullable:false)
}
}
在SalesAdvisorController中,我保存了SalesAdvisor实例:
def save = {
def portfolio = new Portfolio()
def inventory = new Inventory(name:'${params.fullName}Inventory', description:"${params.fullName}'s Inventory")
params.customerPortfolio = portfolio
params.inventory = inventory
def salesAdvisor = new SalesAdvisor(params)
if(!salesAdvisor.hasErrors() && salesAdvisor.save()){
log.info("New instance of SalesAdvisor saved.")
redirect(action:show, id:salesAdvisor.id)
}else{
log.error("There was an error saving the sales advisor.")
salesAdvisor.errors.allErrors.each{
println it.code
}
render(view:'create', model:[salesAdvisor:SalesAdvisor])
}
}
为了显示任何错误,请在“创建”视图中输入:
<g:hasErrors bean="${salesAdvisor}">
<div class="errors">
<g:renderErrors bean="${salesAdvisor}" as="list" />
</div>
</g:hasErrors>
验证似乎工作正常。但是,如果我为comission字段提交字符串而不是float,在日志中我可以看到“typeMismatch”,但视图没有呈现任何内容! message.properties文件具有typeMismatch的默认条目。对于fullName字段也是一样,在日志中我可以看到“可空”和“空白”错误,但视图没有呈现任何内容。
我猜这是视图的错误,而不是控制器或域,因为单元测试表现得像他们应该的那样。
答案 0 :(得分:2)
我说问题是模型传递代码中的一个简单错误:
render(view:'create', model:[salesAdvisor:SalesAdvisor])
(注意大写的SalesAdvisor值)。尝试
render(view:'create', model:[salesAdvisor:salesAdvisor])
作为旁注,您的库存构建代码中存在错误:
name:'${params.fullName}Inventory'
你应该在这里使用双引号(GString)。