2015-10-11 3 views
0

Я новичок в Grails я использую Grails 2.5.1, я создаю службы, но когда я называю эту услугу я получаю сильфонные ошибки:ошибки в службе Grails

Class:groovy.lang.MissingPropertyExceptionMessage:No such property: flash for class: com.sherif.UtilsService Possible solutions: class 

и

Class:groovy.lang.MissingMethodExceptionMessage:No signature of method: com.sherif.UtilsService.render() is applicable for argument types: (java.util.LinkedHashMap) values: [[view:forget]] Possible solutions: every(), find(), find(groovy.lang.Closure), every(groovy.lang.Closure) 

вот моя служба:

class UtilsService { 

def sendPassword(params) { 

    def enteredCeredintials = User.findByEmail(params?.email) 
    if (enteredCeredintials?.email==null) { 
     flash.message = message(code: 'user.email.notfound', args: [params?.email]) 

    } 
    else { 
     flash.message = message(code: 'user.passwordSent', args: [params?.email]) 
     } 
render (view: "forget") 
} 
} 

что может причиной этих ошибок? не

Благодаря

ответ

2

flash является временным хранилищем используется в веб-уровня - это один из неявных переменных, которая доступна в контроллерах, наряду с request, response, session и т.д. Но это не доступно в сфере услуг - там нет неявные переменные в сервисах.

В идеале вы должны придерживаться каждого уровня отдельно. Сервисы не должны работать или знать веб-уровень - они являются вспомогательными классами, которые используют бизнес-логику для выполнения различных задач, работы с базой данных и т. Д. Они вызываются контроллерами, но не должны быть загрязнены веб-сайтом уровня.

Чтобы исправить это, извлеките логику, не зависящую от веб-уровня, и выполните эту работу в службе. Затем верните все данные, необходимые для визуализации представления в контроллере, и в этом случае дополнительно сохраните некоторые данные в области flash.

+0

спасибо, я понял, ценю это – Sherif

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