我正在开发一个Web应用程序,其中我的业务逻辑需要几种类型的错误消息。
由于我的服务层,我有几次调用messageSource
。
def messageSource
同时,我的应用程序必须支持多种语言,因此我需要定义用户指定的Locale
。
要做到这一点,我得到的Locale
如下:
def request = RequestContextHolder.currentRequestAttributes().request
Locale myLocale = RequestContextUtils.getLocale(request)
但我注意到这段代码在我的服务层中重复出现。即:
def myMethod(){
...
messageSource.getMessage("message.code", [args] as Object[],"Default message",getLocale())
...
}
Locale getLocale(){
def request = RequestContextHolder.currentRequestAttributes().request
return RequestContextUtils.getLocale(request)
}
有没有优雅的方法在我的所有服务和控制器之间共享此方法?或者还有其他方法可以改善这种行为吗?
Grails 2.5.5 - Groovy 2.4.4
谢谢!
答案 0 :(得分:2)
您可以在Groovy特征中实现这些方法,然后在服务中使用特征。
<强>的src /常规/ COM /富/酒吧/ SessionLocale 强>
trait SessionLocale {
def getMessage(String code, String defaultMessage, Object [] args) {
messageSource.getMessage(code, args, defaultMessage,getLocale())
}
Locale getLocale(){
def request = RequestContextHolder.currentRequestAttributes().request
return RequestContextUtils.getLocale(request)
}
}
<强>的grails-app /服务/ COM /富/酒吧/ SomeService 强>
class SomeService implements SessionLocale {
def myMethod(){
...
getMessage("message.code", "Default message", [args] as Object[])
...
}
}