`
icess
  • 浏览: 253405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring in Action 笔记 (IV) -- i18n问题和自定义属性编辑器

阅读更多

Spring in Action 笔记 (IV) -- i18n问题和自定义属性编辑器

  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等.

分享到:
评论

相关推荐

    Spring学习笔记(11)----自定义属性编辑器

    在“Spring学习笔记(11)----自定义属性编辑器”这篇博文中,作者深入探讨了如何自定义属性编辑器以满足特定需求。 首先,我们需要了解属性编辑器的工作原理。当IoC容器读取配置文件时,如果发现一个属性值需要...

    spring 自定义属性编辑器

    这篇博客“spring 自定义属性编辑器”可能详细介绍了如何在Spring中创建和注册自定义属性编辑器,以满足特定的业务需求。 首先,了解Spring中的属性编辑器机制。Spring会自动寻找并使用`java.beans.PropertyEditor`...

    spring-roo-addon-i18n-chinese:spring roo 中国 i18n 插件

    ##spring roo i18n 中文插件##原始地址:https://code.google.com/p/spring-roo-addon-i18n-chinese/因为google code被墙导致无法访问,copy到github。如果有侵犯版权问题,请联系 删除##使用说明##下载源代码执行...

    web开发常用的东东备份-国际化i18n

    在Web开发领域,国际化(Internationalization,通常简称为i18n)是一个至关重要的概念,它使得应用程序能够适应不同国家和地区的用户需求。这个压缩包文件"web开发常用的东东备份-国际化i18n"可能包含了一些关于...

    spring中的自定义属性编辑器

    通过自定义属性编辑器,你可以更好地控制数据的输入和显示,使Spring应用程序更加灵活和健壮。在处理复杂的数据类型或者需要特殊格式化时,这是一个非常有用的工具。在给定的压缩包文件中,可能包含了示例代码或者更...

    spring2.0(三) 自定义属性编辑器

    在Spring 2.0框架中,自定义属性编辑器(Custom Property Editor)是一个重要的功能,它允许开发者扩展Spring的默认属性绑定机制,以处理特定类型的转换。本文将深入探讨这一特性,结合源码分析和实际应用,帮助你...

    spring-boot-starter-hbase自定义的spring-boot的hbasestarter

    `spring-boot-starter-hbase`是一个针对HBase定制的Spring Boot启动器,它的主要目的是提供一个便捷的API接口,使得开发者能够在Spring Boot环境中对HBase进行查询、更新等操作,而无需关心复杂的底层配置和连接管理...

    Spring4 In Action-7.1.2-添加其他的Servlet和Filter

    Spring4 In Action-7.1.2-添加其他的Servlet和Filter,Spring4 In Action-7.1.2-添加其他的Servlet和Filter,Spring4 In Action-7.1.2-添加其他的Servlet和Filter

    spring导入eclipse时少的spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    然而,有时候在导入Spring项目时,可能会遇到一些问题,例如标题中提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"这两个jar包的缺失。这些jar包对于Spring框架的正常运行至关重要,因为...

    springmvc i18n

    标题 "springmvc i18n" 指的是Spring MVC框架中的国际化支持,这是一个关键功能,使得Web应用程序能够为不同的地区和语言提供本地化的用户体验。Spring MVC是Spring框架的一个模块,专注于处理HTTP请求和响应,提供...

    国际化-i18n

    国际化(i18n)是软件开发中的一个重要概念,它指的是使软件能够适应不同语言和地区的过程。这个术语“i18n”是由“internationalization”这个单词的首字母和中间的18个字母组成的,意在简洁地表示这个复杂的主题。在...

    springmvc自定义属性编辑器和参数解析器

    在Spring MVC框架中,属性编辑器(PropertyEditor)和参数解析器(HandlerMethodArgumentResolver)是两个关键组件,用于处理数据转换和模型绑定的过程。它们是实现灵活性和扩展性的重要手段,尤其在处理用户输入...

    黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心

    黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心

    009 maven插件spring-boot-maven-plugin

    spring-boot:repackage 是 Spring Boot Maven Plugin 提供的一个 Goal,用于重新打包可执行的存档。该 Goal 需要指定以下参数: * finalName:存档的名称 * classifier:存档的分类器 * outputDirectory:存档的...

    Spring Boot 国际化(i18n)配置demo.zip

    Spring Boot的国际化(i18n)配置是其强大功能的一部分,它允许开发人员为不同地区的用户提供本地化的应用体验。这个“Spring Boot 国际化(i18n)配置demo.zip”包含了一个演示如何在Spring Boot项目中实现i18n的示例...

    Spring i18n

    Spring i18n会根据用户的浏览器设置或自定义配置来选择合适的Locale。 3. **MessageSource**:这是Spring的核心接口,用于加载和解析资源 bundle。Spring 提供了多种实现,如`...

    spring-boot-08-starter自定义.rar

    通过分析提供的"spring-boot-08-starter"和"spring-boot-08-starter-test"两个Java项目,我们可以学习如何构建一个自己的Spring Boot Starter,并在其他项目中应用它。 Spring Boot的Starter是其核心特性之一,它...

    spring boot国际化 i18n

    在上述代码中,`basenames`属性设置为`classpath:i18n/messages`,意味着Spring将在类路径下的`i18n`目录查找名为`messages.properties`的资源文件。同时,我们设置了默认编码为UTF-8。 2. **创建资源文件**: ...

    Spring4 In Action-3.5.1-@PropertySource运行时注入值

    Spring4 In Action-3.5.1-@PropertySource运行时注入值,Spring4 In Action-3.5.1-@PropertySource运行时注入值,Spring4 In Action-3.5.1-@PropertySource运行时注入值,Spring4 In Action-3.5.1-@PropertySource...

    10 扩展之Spring MVC中如何实现国际化i18n慕课专栏1

    Spring MVC的国际化(i18n)是基于Java的国际化机制构建的,它利用Resource Bundle加载对应国家/地区(Locale)的语言资源文件,以便根据用户的语言环境提供相应的信息。Spring MVC通过`ResourceBundleMessageSource...

Global site tag (gtag.js) - Google Analytics