在我的Grails应用程序中,我在一个控制器上做了一个过滤器,所有工作正常,除了这部分:
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"
更改了它,那么
为什么它不能正常工作?
答案 0 :(得分:1)
我认为在控制器中工作的大多数这样的东西也适用于过滤器,但显然不是。在这种情况下,有一种解决方法,实际上是一种更好的方法。
message
在控制器中工作,因为控制器支持直接调用taglib,如果命名空间是g
,那么你可以省略它,因此调用message
或g.message
控制器都调用<g:message>
taglib。但是所有taglib都是来自messageSource
Spring bean的渲染消息,所以你可以跳过一两层间接并直接调用它。
将此导入添加到过滤器类
import org.springframework.context.i18n.LocaleContextHolder
和这种依赖注入
def messageSource
然后您可以使用
设置Flash消息flash.message = messageSource.getMessage('empSeeker.profileExists',
null, LocaleContextHolder.locale)