【问题标题】:flash.message in grails filtergrails 过滤器中的 flash.message
【发布时间】:2016-01-31 23:40:40
【问题描述】:

在我的 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" 更改它,它可以工作,

它不工作的任何原因?

【问题讨论】:

    标签: grails grails-filters


    【解决方案1】:

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

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

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

    import org.springframework.context.i18n.LocaleContextHolder
    

    还有这个依赖注入

    def messageSource
    

    然后你就可以用

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

    【讨论】:

      猜你喜欢
      • 2012-01-02
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多