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

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

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

    Junky's IT Notebook

    統計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

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

    posted on 2006-05-29 23:19 junky 閱讀(393) 評論(0)  編輯  收藏 所屬分類: spring

    主站蜘蛛池模板: 亚洲国产成人片在线观看| 一二三四在线播放免费观看中文版视频| 老司机永久免费网站在线观看| 中文字幕亚洲精品资源网| 久久久高清日本道免费观看| 亚洲精品少妇30p| 成人性生交大片免费看好| 精品亚洲成α人无码成α在线观看| 欧亚一级毛片免费看| 亚洲午夜精品久久久久久浪潮 | 国产一卡二卡≡卡四卡免费乱码| 亚洲国产成人无码AV在线影院| 蜜臀91精品国产免费观看| 色天使亚洲综合一区二区| 免费h成人黄漫画嘿咻破解版| 人人鲁免费播放视频人人香蕉| 亚洲色欲一区二区三区在线观看| 国产在线国偷精品免费看| 亚洲成av人影院| 中文字幕视频免费| 亚洲日本乱码卡2卡3卡新区| 成年女人午夜毛片免费视频| 狠狠热精品免费观看| 亚洲精品无码永久中文字幕| 久久免费的精品国产V∧| 激情亚洲一区国产精品| 免费无遮挡无码视频网站| 黄色毛片免费网站| 国产亚洲自拍一区| 最近免费中文字幕高清大全 | 亚洲三级视频在线观看| 国产zzjjzzjj视频全免费| 国产成人AV免费观看| 亚洲一卡二卡三卡四卡无卡麻豆| 永久免费看bbb| 免费在线中文日本| 亚洲女女女同性video| 中文字幕精品亚洲无线码一区应用| 在线a免费观看最新网站| 野花视频在线官网免费1| 亚洲成AV人片在线观看ww|