ish*_*shi 1 java spring spring-mvc internationalization
我想从函数中的 i18n 属性中检索消息。我可以通过以下语句在我的服务层或控制器中检索消息:
@Autowired
private ApplicationContext appContext;
public void myFunction(){
String errrorMsg = appContext.getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
}
Run Code Online (Sandbox Code Playgroud)
但我想在服务层或控制器之外的函数中检索此 i18n 消息。正在从我的服务层调用此函数。我该怎么做?我试图在外部类中复制相同的代码,但我收到了 nullPointerException
将MessageSource注入您的服务(而不是ApplicationContext)。
在该服务中,您可以使用 messageSource..getMessage("application.errorcode.sessionExpiry", null, LocaleContextHolder.getLocale());
如果您需要此服务之外的此功能(在某些 Not-Spring-Bean 实例中),那么我会将MessageSource(和语言环境)传递给另一个类。
@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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1384 次 |
| 最近记录: |