在 SpringMVC getMessage 来自控制器外部函数中的 i18n 属性
in SpringMVC getMessage from i18n properties in a function outside the controller
我想从函数中的 i18n 属性中检索消息。我可以通过以下语句在我的服务层或控制器中检索消息:
@Autowired
private ApplicationContext appContext;
public void myFunction(){
String errrorMsg = appContext.getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
}
但我想在服务层或控制器之外的函数中检索此 i18n 消息。这个函数是从我的服务层调用的。
我该怎么做?
我试图在外部 class 中复制相同的代码,但我得到了 nullPointerException
将 MessageSource
注入您的服务(而不是 ApplicationContext
)。
在该服务中,您可以使用 messageSource..getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
如果您需要此服务之外的此功能(在某些 Not-Spring-Bean 实例中),那么我会将 MessageSource
(和语言环境)传递给另一个 class.
@Component
public class MessageSourceExternalizer {
@Autowired
private MessageSource messageSource;
public String getMessage(String code) {
//Attention LocaleContextHolder.getLocale() is thread based,
//maybe you need some fallback locale
return messageSource.getMessage(code, new Object[0], LocaleContextHolder.getLocale());
} }
@Service
public YourService {
@Autowired
private MessageSourceExternalizer messageSourceExternalizer;
public void yourServiceMethod() {
....
YourNotSpringBean yourNotSpringBean
= new YourNotSpringBean(messageSourceExternalizer);
yourNotSpringBean.doSomething(...);
} }
public class YourNotSpringBean {
private final MessageSourceExternalizer messageSourceExternalizer;
public YourNotSpringBean(MessageSourceExternalizer messageSourceExternalizer) {
this.messageSourceExternalizer = messageSourceExternalizer;
}
public void doSomething() {
....
this.messageSourceExternalizer.getMessage("application.errorcode.sessionExpiry");
}
}
我想从函数中的 i18n 属性中检索消息。我可以通过以下语句在我的服务层或控制器中检索消息:
@Autowired
private ApplicationContext appContext;
public void myFunction(){
String errrorMsg = appContext.getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
}
但我想在服务层或控制器之外的函数中检索此 i18n 消息。这个函数是从我的服务层调用的。 我该怎么做? 我试图在外部 class 中复制相同的代码,但我得到了 nullPointerException
将 MessageSource
注入您的服务(而不是 ApplicationContext
)。
在该服务中,您可以使用 messageSource..getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
如果您需要此服务之外的此功能(在某些 Not-Spring-Bean 实例中),那么我会将 MessageSource
(和语言环境)传递给另一个 class.
@Component
public class MessageSourceExternalizer {
@Autowired
private MessageSource messageSource;
public String getMessage(String code) {
//Attention LocaleContextHolder.getLocale() is thread based,
//maybe you need some fallback locale
return messageSource.getMessage(code, new Object[0], LocaleContextHolder.getLocale());
} }
@Service
public YourService {
@Autowired
private MessageSourceExternalizer messageSourceExternalizer;
public void yourServiceMethod() {
....
YourNotSpringBean yourNotSpringBean
= new YourNotSpringBean(messageSourceExternalizer);
yourNotSpringBean.doSomething(...);
} }
public class YourNotSpringBean {
private final MessageSourceExternalizer messageSourceExternalizer;
public YourNotSpringBean(MessageSourceExternalizer messageSourceExternalizer) {
this.messageSourceExternalizer = messageSourceExternalizer;
}
public void doSomething() {
....
this.messageSourceExternalizer.getMessage("application.errorcode.sessionExpiry");
}
}