我正在开发一个 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)
}
是否有任何优雅的方法可以在我的所有服务和 Controller 之间共享此方法?或者有其他方法可以改善这种行为吗?
Grails 2.5.5 - Groovy 2.4.4
谢谢!
最佳答案
您可以在 Groovy 特征中实现这些方法,然后在您的服务中使用该特征。
src/groovy/com/foo/bar/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/services/com/foo/bar/SomeService
class SomeService implements SessionLocale {
def myMethod(){
...
getMessage("message.code", "Default message", [args] as Object[])
...
}
}
关于Grails 2.5.5 - 如何提高服务层错误消息的国际化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810992/