2016-01-31 3 views
1

в моем приложении Grails, я сделал фильтр на контроллере, все работает отлично, за исключением этой части:flash.message в Граалей фильтр

flash.message = message(code: 'empSeeker.profileExists') 

и ошибка:

Message:No signature of method: com.MyApp.filters.HRCheckFilters.message() is applicable for argument types: (java.util.LinkedHashMap) values: [[code:empSeeker.profileExists]] Possible solutions: isCase(java.lang.Object) 

но если я изменил его с flash.message="Any message", он работает,

По какой причине он не работает?

ответ

1

Я думал, что большинство таких вещей, которые работают в контроллере, также работают в фильтрах, но, по-видимому, нет. В этом случае есть обходной путь, который на самом деле является лучшим подходом.

message работает в контроллере, так как контроллеры поддерживают призывающие библиотеки тегов непосредственно, и если пространство имен g, то вы можете опустить его, поэтому вызов message или g.message в контроллере и вызвать <g:message> TagLib. Но все теги taglib - это сообщения рендеринга из весеннего боба messageSource, поэтому вы можете пропустить слой или два из косвенных ссылок и вызвать их напрямую.

Добавить этот импорт в фильтры класса

import org.springframework.context.i18n.LocaleContextHolder 

и этой инъекции

def messageSource 

зависимостей, а затем вы можете установить флэш-сообщение с

flash.message = messageSource.getMessage('empSeeker.profileExists', 
              null, LocaleContextHolder.locale) 
Смежные вопросы