在我的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
那么您可以省略它,因此在控制器中调用 message
或 g.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)