2016-01-31 39 views
1

在我的Grails应用程序,我一个控制器上的过滤器,所有工作正常,除了这一部分:flash.message 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"它的工作原理,

任何它不工作的原因?

回答

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) 
设置闪光灯消息