flash.message in grails过滤器

时间:2016-01-31 23:40:40

标签: grails grails-filters

在我的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"更改了它,那么

为什么它不能正常工作?

1 个答案:

答案 0 :(得分:1)

我认为在控制器中工作的大多数这样的东西也适用于过滤器,但显然不是。在这种情况下,有一种解决方法,实际上是一种更好的方法。

message在控制器中工作,因为控制器支持直接调用taglib,如果命名空间是g,那么你可以省略它,因此调用messageg.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)