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在控制器中工作,因为控制器支持直接调用 taglibs,如果命名空间g那么您可以省略它,因此在控制器中调用 messageg.message 都会调用<g:message> taglib。但是 taglib 所做的只是从 Spring Bean messageSource渲染消息,因此您可以跳过一两个间接层并直接调用它。

将此导入添加到筛选器类

import org.springframework.context.i18n.LocaleContextHolder

而这种依赖注入

def messageSource

然后,您可以使用以下方法设置闪光消息

flash.message = messageSource.getMessage('empSeeker.profileExists',
                                          null, LocaleContextHolder.locale)

最新更新