flash.message 在 grails 过滤器中

flash.message in grails filter

在我的 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" 更改它,它会起作用,

为什么它不起作用?

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

message在controller中工作,因为controller支持直接调用taglibs,如果命名空间是g那么你可以省略它,所以调用messageg.message在控制器中都调用 <g:message> 标签库。但是 taglib 所做的只是呈现来自 messageSource Spring bean 的消息,因此您可以跳过一两层间接寻址并直接调用它。

将此导入添加到您的过滤器中class

import org.springframework.context.i18n.LocaleContextHolder

和这个依赖注入

def messageSource

然后你可以用

设置闪信
flash.message = messageSource.getMessage('empSeeker.profileExists',
                                          null, LocaleContextHolder.locale)