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

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

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

    隨筆 - 3, 文章 - 152, 評論 - 17, 引用 - 0
    數據加載中……

    對于moxie的"WebWork教程"補充 - [類型轉化]

    moxie的WebWork教程 ( http://forum.javaeye.com/viewtopic.php?t=5964 ) 非常詳細,但是好像還缺少了webwork其他一些很有特色的東西,我在這里補充一些上來,首先是類型轉化:

    我們知道由于HTTP協議只能傳遞String,如果后臺的Java模型使用了其他類型的屬性,必須得做一些轉化工作,而這些轉化代碼通常卻是繁瑣而又無聊,WebWork提供了Type Conversion功能,能夠讓我們從這些代碼中解脫出來。

    看一個例子,

    一個Person對象,有一個出生日期的屬性:
    java代碼: 


    public class Person {
        private Date dateOfBirth;
    }



    一個Action對Person做操作:
    java代碼: 


    public class CreatePerson implements Action {
        private Person person;
       
        public String execute() throws Exception {
            //Do some work
            //...
            return SUCCESS;
        }

    }



    我們通常在頁面上會限制這個日期的格式(比如yyyy-MM-dd),通過寫一個WebWork的轉化器,我們就可以把在頁面上:<input type="text" name="person.dateOfBirth" value="1949-10-01"/> 這樣的值直接變成了相應的Date對象。

    轉換器需要擴展ognl.DefaultTypeConverter (在webwork2.1.6以后,我們可以擴展WebWorkTypeConverter這個對象,更新的代碼可以參考這個: http://cvs.javaeye.com:8008/quake/getfile/jert/src/java/com/javaeye/core/webwork/converter/DateConverter.java?v=1.2 )
    java代碼: 


    public class DateConverter extends DefaultTypeConverter {
        private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        public Object convertValue(Map ognlContext, Object value, Class toType) {
            Object result = null;
            if (toType == Date.class) {
                result = doConvertToDate(value);
            } else if (toType == String.class) {
                result = doConvertToString(value);
            }
            return result;
        }

        private Date doConvertToDate(Object value) {
            Date result = null;

            if (value instanceof String) {
                try {
                    result = sdf.parse((String) value);
                } catch (ParseException e) {
                    throw new XworkException("Could not parse date", e);
                }
            } else if (value instanceof Object[]) {
                // let's try to convert the first element only
                Object[] array = (Object[]) value;
                if ((array != null) && (array.length >= 1)) {
                    value = array[0];
                    result = doConvertToDate(value);
                }
            } else if (Date.class.isAssignableFrom(value.getClass())) {
                result = (Date) value;
            }
            return result;
        }

        private String doConvertToString(Object value) {
            String result = null;
            if (value instanceof Date) {
                result = sdf.format(value);
            }
            return result;
        }
    }



    那么WebWork是如何知道要使用這個轉化器對Person的dateOfBirth做轉化呢?我們有2種方法:
    1. Class-specific conversion rules
    寫一個className-conversion.properties,這上面的例子里,我們就在Person.java所在的package下面,寫一個Person-conversion.properties
    在這個文件里面指定:
    dateOfBirth=com.javaeye.core.webwork.converter.DateConverter

    2. Application-wide conversion rules
    在classpath root下面寫一個xwork-conversion.properties:
    java.util.Date=com.javaeye.core.webwork.converter.DateConverter

    這樣一旦寫好了一個轉換器以后,就能夠很方便地被重用了,在這篇wiki里面,有更加詳細的介紹: http://wiki.opensymphony.com/display/XW/Type+Conversion

    再舉一個實際的例子:
    在jert里面,我們希望可以給用戶選擇多語言,那么我們在頁面上提供了一個下拉列表,選項有zh_CN和en_US,通過一個LocaleConverter,我們就可以直接把String轉化成Locale對象:

    http://cvs.javaeye.com:8008/quake/getfile/jert/src/java/com/javaeye/core/webwork/converter/LocaleConverter.java?v=1.1

    結論:靈活使用轉換器可以減少我們那些繁瑣無聊的類型轉化代碼。

    posted on 2005-03-05 22:20 閱讀(324) 評論(0)  編輯  收藏 所屬分類: J2ee

    主站蜘蛛池模板: 亚洲高清免费在线观看| 九九热久久免费视频| 亚洲国产日产无码精品| 亚洲色av性色在线观无码| 亚洲欧洲国产成人精品| 亚洲熟妇AV日韩熟妇在线| 日亚毛片免费乱码不卡一区 | 免费无码又爽又刺激高潮 | 婷婷亚洲综合一区二区| 美女巨胸喷奶水视频www免费| 亚洲国产成人a精品不卡在线 | youjizz亚洲| 日本一区二区三区在线视频观看免费| 久久福利青草精品资源站免费| 久久笫一福利免费导航| 亚洲а∨天堂久久精品| 一级毛片在线免费视频| 成人免费无码大片a毛片软件| 一本色道久久综合亚洲精品高清 | 日韩精品免费一区二区三区| 亚洲图片一区二区| 在线观看国产一区亚洲bd| 一区二区视频免费观看| 国产亚洲精品福利在线无卡一| 亚洲人精品亚洲人成在线| 久久久精品免费国产四虎| 亚洲国产一区二区三区青草影视| 天天影视色香欲综合免费| 好看的电影网站亚洲一区| 美女被吸屁股免费网站| 成人免费无码大片a毛片| 色屁屁www影院免费观看视频| 国产亚洲一区二区精品| 国产精品爱啪在线线免费观看| 久久精品国产精品亚洲艾| 国产精品美女久久久免费 | 亚洲五月丁香综合视频| 足恋玩丝袜脚视频免费网站| mm1313亚洲国产精品无码试看| 自拍偷自拍亚洲精品被多人伦好爽| 91av在线免费视频|