<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ryan's Java world!

    something about Java and opensource!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      51 Posts :: 25 Stories :: 59 Comments :: 0 Trackbacks

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

    posted on 2006-05-29 11:24 冰雨 閱讀(3085) 評論(0)  編輯  收藏 所屬分類: Spring

    JSF中文技術文摘
    主站蜘蛛池模板: 久久久久久国产精品免费免费男同 | 亚洲av成人无码久久精品| 五月天婷婷精品免费视频| 国产青草视频在线观看免费影院| 国产亚洲玖玖玖在线观看| 在线观看av永久免费| 亚洲综合一区国产精品| 日韩精品无码人妻免费视频| 亚洲精品亚洲人成在线播放| 国产成人A在线观看视频免费| 亚洲精品456人成在线| 日韩在线看片免费人成视频播放| 亚洲AV永久无码精品一福利| 成人午夜视频免费| 午夜亚洲国产精品福利| 国产亚洲精品a在线观看| 免费看黄的成人APP| 蜜芽亚洲av无码精品色午夜| 57PAO成人国产永久免费视频| 亚洲熟妇少妇任你躁在线观看| 暖暖免费高清日本中文| 免费人成视频在线播放| 亚洲大尺度无码无码专区| 51在线视频免费观看视频| 亚洲国产精华液2020| 亚洲中文字幕伊人久久无码| 中文字幕免费在线看线人动作大片 | 91香蕉在线观看免费高清| 亚洲综合色7777情网站777| 国产精品久久免费视频| 久久www免费人成精品香蕉| 亚洲综合在线视频| 国产精品高清全国免费观看| 国产在线精品一区免费香蕉| 亚洲黄色在线观看网站| 日本黄色免费观看| 全免费a级毛片免费看| 亚洲精品久久无码| 亚洲乱码中文字幕综合| 大地资源在线观看免费高清| jizz日本免费|