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

    主站蜘蛛池模板: 亚洲国产电影av在线网址| 67194熟妇在线永久免费观看| 国产一级淫片a免费播放口之| 成人区精品一区二区不卡亚洲| 青娱分类视频精品免费2| 337p日本欧洲亚洲大胆精品555588| 免费精品一区二区三区第35 | 亚洲午夜精品一区二区麻豆| 无码区日韩特区永久免费系列| 亚洲综合激情另类小说区| 91热久久免费精品99| 亚洲欧洲日韩在线电影| 免费A级毛片无码A∨免费| 亚洲成a人片在线网站| 两性刺激生活片免费视频| 亚洲熟妇无码一区二区三区导航| 在线免费观看a级片| 国产亚洲福利一区二区免费看| 亚洲精品乱码久久久久久不卡| 国产伦精品一区二区免费| 好看的电影网站亚洲一区| 一区二区三区观看免费中文视频在线播放 | 亚洲aⅴ无码专区在线观看春色| 免费福利在线播放| 亚洲欧美日韩久久精品| 国产亚洲福利一区二区免费看| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲第一区精品日韩在线播放| 亚洲爆乳大丰满无码专区| 亚洲A丁香五香天堂网| 国产精品永久免费| 亚洲午夜国产精品无卡| yy6080亚洲一级理论| 无码国产精品一区二区免费vr| 精品日韩99亚洲的在线发布| 亚洲成片观看四虎永久| 久久黄色免费网站| www亚洲精品久久久乳| 亚洲色图在线播放| 国产又黄又爽又猛的免费视频播放 | 好爽…又高潮了毛片免费看|