2010-07-16 34 views
14

Có ai biết làm thế nào tôi có thể nhận được fieldError để in ra trong ví dụ dưới đây.Hiển thị lỗi trường Grails

cho mỗi mục với một lỗi, tôi muốn in thông báo lỗi tùy chỉnh mà tôi đã xác định trong các messages.properties nộp

tại thời điểm tất cả điều này là in các mã lỗi mặc định

item.errors?.allErrors?.each{ 
    println it.toString() 
} 

Tôi đã thấy các ví dụ khác nơi bạn có thể tra cứu mã lỗi cho một trường, ví dụ

it.getFieldError('title').code 

nhưng tôi muốn chuyển thư mặc định thành thông báo lỗi mới của tôi và in.

Trả lời

20

Bạn cần quyền truy cập vào thông báoSource nguồn, ví dụ: với

def messageSource 

trong bộ điều khiển hoặc dịch vụ của bạn. Sau đó, bạn có thể truy cập các thông điệp với

def locale = Locale.getDefault() 
for (fieldErrors in bean.errors) { 
    for (error in fieldErrors.allErrors) { 
     String message = messageSource.getMessage(error, locale) 
    } 
} 
+1

đặt def messageSource (trong điều khiển hoặc dịch vụ) Cảm ơn này làm việc. item.errors? .allErrors? .each { println messageSource.getMessage (it, null) }; Tôi cũng tìm thấy một liên kết tốt mà giải thích điều này tốt hơn http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html – MTH

+1

Burt, nó không có vẻ như thế này trở nên đơn giản hơn kể từ năm 2010. Có lý do gì khiến các đối tượng lỗi riêng lẻ không có trường 'message' trả về thông báo cụ thể thay vì phải nhập một bean và gọi một phương thức tĩnh? –

Các vấn đề liên quan