2013-04-25 5 views
1

Каков наиболее эффективный способ регистрации объекта команды с ошибками в Grails?Как регистрировать ошибки объекта команды Grails?

Моя текущая регистрация только,

if (!cmd.validate()) log.debug("command invalid ${cmd.errors}") 

но это просто извергает нечитаемый беспорядок продукции.

У кого-нибудь есть предложения по улучшению регистрации объектов команд?

ответ

6

Добавить инъекции в зависимость для messageSource фасоли:

def messageSource 

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

def locale = Locale.default 
def stringsByField = [:].withDefault { [] } 
for (fieldErrors in cmd.errors) { 
    for (error in fieldErrors.allErrors) { 
     stringsByField[error.field] << messageSource.getMessage(error, locale) 
    } 
} 

и вы можете просто запустить println stringsByField или искать индивидуальные проблемы с помощью ключа.

Здесь я использую Locale по умолчанию, но если вы используете локализацию, используйте текущую для запроса.

3
cmd.errors.allErrors.each { 
    log.debug it 
} 

Редактировать (Подробней)

cmd.errors.allErrors.each {err -> 
    log.debug("[$err.field]: $err") 
} 
+0

Не будет 'log.debug (cmd.errors.allErrors)' более простым способом сделать это? –

+0

Вы снова закончите извержение. Итерации над каждой «ошибкой» вы могли бы получить дескриптор на каждом «поле» (синонимом того, что @Burt упомянул в его ответе) и «log» в соответствии с вашими потребностями. См. Мое редактирование. – dmahapatro

+0

А я понимаю, что вы имеете в виду. –

Смежные вопросы