<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 冰雨 閱讀(3088) 評論(0)  編輯  收藏 所屬分類: Spring

    JSF中文技術文摘
    主站蜘蛛池模板: 久久久亚洲精品蜜桃臀| 女人18一级毛片免费观看| 亚洲视频在线免费| 精品亚洲成A人在线观看青青| 日本黄网站动漫视频免费| 99亚洲精品高清一二区| 最近中文字幕免费mv在线视频| 久久综合图区亚洲综合图区| 中文字幕久精品免费视频| 亚洲无码在线播放| 一区二区三区无码视频免费福利| 久久久精品国产亚洲成人满18免费网站| 亚洲GV天堂无码男同在线观看 | 亚洲免费综合色在线视频| 在线观看亚洲人成网站| 5g影院5g天天爽永久免费影院| 亚洲最大在线视频| 噼里啪啦电影在线观看免费高清 | 4虎1515hh永久免费| 亚洲一级毛片免费在线观看| 国产免费毛不卡片| 亚洲sm另类一区二区三区| 免费一看一级毛片| 三级黄色片免费看| 亚洲综合色丁香麻豆| 18禁无遮挡无码网站免费| 色婷婷亚洲一区二区三区| 日本亚洲国产一区二区三区| 亚洲中文字幕无码爆乳app| 18女人水真多免费高清毛片| 亚洲人成图片网站| 亚洲毛片在线免费观看| 国产日本亚洲一区二区三区| 国产小视频免费观看| 精品熟女少妇aⅴ免费久久| 91亚洲自偷手机在线观看| 成人au免费视频影院| 人人鲁免费播放视频人人香蕉| 亚洲国产高清在线| 国产精品美女自在线观看免费| a毛片久久免费观看|