Мне трудно разобраться с этой проблемой проверки. У меня есть один родительский класс домена, определенный следующим образом:
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", но представление ничего не отображает.
Я предполагаю, что это скорее ошибка представления, чем контроллер или домен, поскольку модульные тесты ведут себя так, как должны.