验证错误未在视图中呈现

时间:2009-06-22 02:11:26

标签: validation grails error-handling groovy

我很难解决这个验证问题。我有一个父域类定义如下:

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字段也是一样,在日志中我可以看到“可空”和“空白”错误,但视图没有呈现任何内容。

我猜这是视图的错误,而不是控制器或域,因为单元测试表现得像他们应该的那样。

1 个答案:

答案 0 :(得分:2)

我说问题是模型传递代码中的一个简单错误:

render(view:'create', model:[salesAdvisor:SalesAdvisor])

(注意大写的SalesAdvisor值)。尝试

render(view:'create', model:[salesAdvisor:salesAdvisor])

作为旁注,您的库存构建代码中存在错误:

name:'${params.fullName}Inventory'

你应该在这里使用双引号(GString)。