旅行的意義

           

          struts2類型轉換

          概說
          許多時候struts能很好的將頁面上field中的字符輸入和POJO類中的屬性對應起來并自動轉換(比如整型、日期等等),但如果遇到一些自定義復雜業務類型,就需要我們顯式的提供轉換處理。

          struts2中實現類型轉換的接口為

           

          interface com.opensymphony.xwork2.conversion.TypeConverter

           

          其中定義的方法為

           

          Object convertValue(Map<String,Object> context, Object target, Member member, String propertyName, Object value, Class toType)

           

           

          為了方便使用,struts2提供了兩個實現

          (1) com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter

          我們只需要override其中的

          Object convertValue(Map<String,Object> context, Object value, Class toType) 方法即可。

          toType為將要轉換為的類型

           

          (2)更方便的解決辦法是繼承抽象類

          org.apache.struts2.util.StrutsTypeConverter

          它繼承了上面的類,并提供了兩個抽象函數

           

          abstract  Object convertFromString(Map context, String[] values, Class toClass)

          abstract
            String convertToString(Map context, Object o)

           

          因為平時最常用的就是特定類型與String類的互轉,所以在一般情況下實現這兩個方法已經足夠了。

           

           下面簡單說一下轉換原理。在JSP中的s:textfield提交后到Action的同時也將調用Action的set方法賦值,如果此時Action中定義了POJO類,則struts2會自動試圖尋找該類和String[]之間的轉換方法。他回到如下兩個地方尋找:

          (1)WEB-INF下的 xwork-conversion.properties

          某個字段=轉換該字段的類

          如:point1=PointConverter

          (2)與XXXAction所在同一級目錄下的XXXAction-conversion.properties

          某個要轉換的類=轉換該類的類

          如:Point=PointConverter

          如果同時配置的話,(2)具有更高的優先級。

          幾個需要記住的幾個地方再寫一下:
          class DefaultTypeConverter                     struts2中類型轉換的基類 

          class StrutsTypeConverter                        struts2提供的一個更方便的實現

          xwork-conversion.properties                    全局轉換屬性文件名

          XXXAction-conversion.properties            基于特定Action的轉換屬性文件名

           



          集合及部分自動轉換

          集合的話,最好用范型指定轉換類的類型,否則Struts會找不到

          List<ClassA>

           

          部分自動轉換是指頁面上可以直接寫類似于ClassA.A,ClassA.B 這樣的field,

          程序會自動尋找Action中的setClassA方法,同時尋找ClassA中的setA和setB方法從而賦值。
          但是好像實際使用的時候用的并不多,因為這樣事實上直接將POJO的細節透露給表示層。

          posted on 2009-01-25 17:20 bacon 閱讀(2728) 評論(0)  編輯  收藏 所屬分類: J2EE

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 巫溪县| 莲花县| 绥德县| 桐庐县| 和林格尔县| 宁晋县| 尤溪县| 揭阳市| 苏尼特左旗| 宜阳县| 镇宁| 怀来县| 新闻| 昌平区| 微博| 青铜峡市| 富蕴县| 兴宁市| 泌阳县| 襄樊市| 垣曲县| 鄯善县| 黄冈市| 翁牛特旗| 北宁市| 香港 | 平凉市| 威海市| 徐水县| 紫阳县| 乐陵市| 香格里拉县| 蒙阴县| 共和县| 中阳县| 高淳县| 来凤县| 甘洛县| 永登县| 银川市| 陕西省|