spring mvc中,如何在 Java 代码里,获取 国际化 内容

2017-10-25 11:18:06来源:CSDN作者:beiguoshaoxia人点击

分享

在spring MVC中,要想实现国际化,必须要在xml中定义如下:

 

Xml代码  收藏代码
  1. <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">  
  2.     <property name="basenames">  
  3.         <list>  
  4.             <value>messages</value>  
  5.         </list>  
  6.     </property>  
  7. </bean>  

 其中,id 的值必须是 “messageSource”,否则会报错。

 

list里的是你国际化文件的名称(上面那么写的话,那么,这份文件应该是放置于classpath根目录下的)。

以上的配置,估计有过sping MVC开发经验的童鞋都是知道的。

 

我今天遇到一个需求是,要在java代码中获取国际化文件中的内容。

以前如果是使用struts2的话,很容易实现,只要任意一个类继承 ActionSupport ,然后就可以使用getText()之类的方法去获取了。

但在spring中,没有这种类供来继承。

那怎么办呢,只好另想它法了。

首先,我想到的是,既然它是一个被声明好的bean,那么,应该可以使用 @Autowired 标签来绑定吧。于是我写了如下的代码:

 

Java代码  收藏代码
  1. public class Const {  
  2.     @Autowired  
  3.     private static ResourceBundleMessageSource rms  
  4.       
  5.     public static String getTextValue(String key) {  
  6.         return rms.getMessage(key, nullnull);  
  7.     }  
  8. }  

以为可以完美解决这个问题的。但事实总是残酷的,你会发现,rms 的值一直是null,也就是说注入失败了。至于为什么失败,我现在还没想明白,有知道的童鞋还麻烦指点一下。

 

后来在网上查到,“ApplicationContext” 这个接口继承了“MessageSource”接口,那么我们只要获取项目的 ApplicationContext 的实现类,就可以通过 getMessage() 方法来获取国际化文件内容了。

那么要如何简单方便的来获取 ApplicationContext 的实现类呢?这个时候就需要另一个接口了,即“ApplicationContextAware”,任何类实现这个接口,均会被注入  ApplicationContext 。

那还等什么,赶快来试一下吧:

Java代码  收藏代码
  1. public class SpringUtil implements ApplicationContextAware {  
  2.     private static ApplicationContext applicationContext;  
  3.   
  4.     public static ApplicationContext getApplicationContext() {  
  5.         return applicationContext;  
  6.     }  
  7.   
  8.     @Override  
  9.     public void setApplicationContext(ApplicationContext arg0) throws BeansException {  
  10.         applicationContext = arg0;  
  11.     }  
  12.   
  13.     public static Object getBean(String id) {  
  14.         Object object = null;  
  15.         object = applicationContext.getBean(id);  
  16.         return object;  
  17.     }  
  18. }  

当然,必须要将上面的 SpringUtil 类在xml文件中配置一下,才能让它被spring框架读取,然后给它注入 ApplicationContext。配置很简单:

Java代码  收藏代码
  1. <bean id="SpringUtil" class="util.SpringUtil"/>  

这样就行了,然后,去改一下上面的Const类吧:

Java代码  收藏代码
  1. public class Const {  
  2.       
  3.     public static String getTextValue(String key) {  
  4.         return SpringUtil.getApplicationContext().getMessage(key, nullnull);  
  5.     }  
  6. }  

是不是很简单啊?

转载自http://rainbow702.iteye.com/blog/2233089

微信扫一扫

第七城市微信公众平台