本站首页    管理页面    写新日志    退出


«December 2025»
123456
78910111213
14151617181920
21222324252627
28293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7687170
建立时间:2006年5月29日




[Spring]Spring in Action 笔记 (IV) -- i18n问题和自定义属性编辑器
软件技术

lhwork 发表于 2006/7/14 10:20:36

  BY: icess Blog: http://blog.matrix.org.cn/page/icess     在Spring中处理I18N问题和使用Java里面的类基本上是一样的.使用org.springframework.context.support.ResourceBundleMessageSource 然后注入资源文件(一个名字为basename的属性),然后就可以在Context中使用资源文件了, 如下为一个配置示例: test.xml <? xml version = "1.0" encoding = "UTF-8" ?><! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >< beans > < bean id = "messageSource" class = "org.springframework.context.support.ResourceBundleMessageSource" > < property name = "basename" > <!-- 注意此处设置 资源 名字 和路径 --> < value > test/i18n/test </ value > </ property > </ bean > </ beans > 下面为资源文件 test.properties name = \u51B0\u96E8 sex = \u5148\u751F test_zh.properties name = \u51B0\u96E8 sex = \u5148\u751F test_en_US.properties name = ice rain sex = male 下面是一个简单的测试类: package test.i18n; import java.util.Locale; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestI18n { /** * @param args */   public static void main(String[] args) {     // TODO Auto-generated method stub     ApplicationContext context = new ClassPathXmlApplicationContext( "test/i18n/test.xml" );    String text = context.getMessage( "sex" , new Object[0], Locale. US );    String textZH = context.getMessage( "sex" , new Object[0], Locale. CHINA );    System. out .println(text + " 中文:" +textZH);  }} 很简单,这样就可以了. 下面来看看Spring中的属性自定义编辑器,这个和Hibernate中的自定义属性差不多 的. 例如下面我们要看到了例子,映射一个电话号码,有areaCode,prefix和 number, 如果不使用自定义属性编辑器那么就要分别注入上面的3个代码,麻烦. 如果使用自定义属性编辑器,直接注入一个-分开的数字序列就可以了 如 888-666-9999 .在下面的例子中的Contact.java类有个PhoneNumber属性,里面保存了上面的3个代码,两个类的代码如下: package  test.propertyEditor; public class  Contact {    private  PhoneNumber phoneNumber;    private  String name;       public  Contact() {}       public  String getName() {      return  name;    }    public void  setName(String name) {      this .name = name;    }    public  PhoneNumber getPhoneNumber() {      return  phoneNumber;    }    public void  setPhoneNumber(PhoneNumber phoneNumber) {      this .phoneNumber = phoneNumber;    }    } PhoneNumber.java package  test.propertyEditor; public class  PhoneNumber {    private  String areaCode;    private  String prefix;    private  String number;    public  PhoneNumber() {         }    public  PhoneNumber(String areaCode,String prefix,String number) {      this .areaCode = areaCode;      this .prefix = prefix;      this .number = number;    }    public  String getAreaCode() {      return  areaCode;    }    public void  setAreaCode(String areaCode) {      this .areaCode = areaCode;    }    public  String getNumber() {      return  number;    }    public void  setNumber(String number) {      this .number = number;    }    public  String getPrefix() {      return  prefix;    }    public void  setPrefix(String prefix) {      this .prefix = prefix;    } } 然后定义一个用来编辑PhoneNumber的编辑器PhoneEditor.java 如下: package  test.propertyEditor; import  java.beans.PropertyEditorSupport; public class  PhoneEditor  extends  PropertyEditorSupport {    public void  setAsText(String textValue) {      String stripped = stripNonNumber(textValue);           String areaCode = stripped.substring( 0 , 3 );      String prefix = stripped.substring( 3 , 6 );      String number = stripped.substring( 6 );      PhoneNumber phone =  new  PhoneNumber(areaCode,prefix,number);           setValue(phone);    }       private  String stripNonNumber(String original) {      StringBuilder allNumeric =  new  StringBuilder();           for ( int  i =  0 ; i < original.length(); i ++) {        char  c = original.charAt(i);        if (Character.isDigit(c)) {          allNumeric.append(c);        }      }      return  allNumeric.toString();    } } 继承java里面的属性编辑器,实现里面的一个方法就可以了, 下面就是在配置文件中注册该编辑器.如下: testPropertyEditor.xml <? xml version = "1.0" encoding = "UTF-8" ?><! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "spring-beans.dtd" >< beans > < bean id = "customEditorConfigurer" class = "org.springframework.beans.factory.config.CustomEditorConfigurer" > < property name = "customEditors" > < map > < entry key = "test.propertyEditor.PhoneNumber" > < bean id = "phoneEditor" class = "test.propertyEditor.PhoneEditor" ></ bean > </ entry > </ map > </ property > </ bean > <!-- 如果不注册上面自定义Editor的实现, 需要注册一个PhoneNumber的bean,设置其属性然后再注册Contact的PhoneNumber的属性--> < bean id = "contact" class = "test.propertyEditor.Contact" > < property name = "phoneNumber" > < value > 888-666-9999 </ value > </ property > </ bean ></ beans > 最后来测试一下注册的结果是否正确: package  test.propertyEditor; import  org.springframework.context.ApplicationContext; import  org.springframework.context.support.ClassPathXmlApplicationContext; public class  TestPropertyEditor {    /**     *  @param  args     */    public static void  main(String[] args) {      // TODO Auto-generated method stub      ApplicationContext context =  new  ClassPathXmlApplicationContext( "test/propertyEditor/testPropertyEditor.xml" );      Contact c = (Contact) context.getBean( "contact" );           System.out.println(c.getPhoneNumber().getAreaCode());      System.out.println(c.getPhoneNumber().getPrefix());      System.out.println(c.getPhoneNumber().getNumber());    } } ok, 很简单,下一次来看看,Spring提供的一下比较有意思的功能.如定时,发送Email等.


阅读全文(1709) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144815718 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号