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
那么你可以省略它,所以调用message
或g.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)
在我的 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
那么你可以省略它,所以调用message
或g.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)