grails - grails 过滤器中的 flash.message

标签 grails grails-filters

在我的 Grails 应用程序中,我在 Controller 上制作了一个过滤器,除了这部分之外一切正常:

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" 更改它有用,

它不工作的任何原因?

最佳答案

我认为大多数像这样在 Controller 中工作的东西也可以在过滤器中工作,但显然不是。在这种情况下,有一种解决方法实际上是一种更好的方法。
message在 Controller 中工作,因为 Controller 支持直接调用标记库,并且如果命名空间是 g那么你可以省略它,所以调用 messageg.message在 Controller 中都调用 <g:message>标签库。但是 taglib 所做的只是渲染来自 messageSource 的消息。 Spring bean,因此您可以跳过一两层间接并直接调用它。

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

import org.springframework.context.i18n.LocaleContextHolder

和这个依赖注入(inject)
def messageSource

然后你可以用
flash.message = messageSource.getMessage('empSeeker.profileExists',
                                          null, LocaleContextHolder.locale)

关于grails - grails 过滤器中的 flash.message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120923/

相关文章:

Grails spring security 重定向到错误的端口

grails - Grails筛选器-访问servletRequest和ServletResponse

Grails 3 在过滤器之前运行拦截器

regex - Grails过滤器正则表达式

grails - 没有为自定义操作调用Grails筛选器

hibernate - 命令对象中的 Grails 域对象始终保存

grails - grails-remoteField/fieldValue我在做什么错?

angularjs - AngularJS 模板中的 Grails Assets 图像

session - 如何在grails中实现cookie、用户跟踪?

html - 如何为具有动态参数的页面提供面包屑?