Ошибки проверки не отображаются в представлении - PullRequest
1 голос
/ 22 июня 2009

Мне трудно разобраться с этой проблемой проверки. У меня есть один родительский класс домена, определенный следующим образом:

class Person {
    String fullName
    List telephones = []

    static hasMany = [telephones : Telephone]

    static constraints = {
        fullName(size:3..50, blank:false, nullable:false)
    }
}

Затем подкласс:

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>

Валидация работает нормально. Однако, если я отправлю строку вместо float для поля комиссии, в журналах я вижу "typeMismatch", но представление ничего не отображает! Файл message.properties содержит запись по умолчанию для typeMismatch. То же самое для поля fullName, в журналах я вижу ошибки "nullable" и "blank", но представление ничего не отображает.

Я предполагаю, что это скорее ошибка представления, чем контроллер или домен, поскольку модульные тесты ведут себя так, как должны.

1 Ответ

2 голосов
/ 22 июня 2009

Я бы сказал, что проблема заключается в простой опечатке в коде передачи модели:

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

(обратите внимание на значение SalesAdvisor в верхнем регистре). Попробуйте

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

В качестве примечания, в коде создания инвентаризации есть ошибка:

name:'${params.fullName}Inventory'

Вы должны использовать двойные кавычки здесь (GString).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...