資源描述:
《struts2學習筆記(四)全局數(shù)據(jù)類型轉(zhuǎn)換》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、struts2學習筆記(四)全局數(shù)據(jù)類型轉(zhuǎn)換?前文講到了局部數(shù)據(jù)類型轉(zhuǎn)換,通過action類目錄下的XAction-conversion.properties配置文件進行指定,在這種轉(zhuǎn)換方法中,如果要對同一個Action類中多個數(shù)據(jù)類型進行轉(zhuǎn)換,可在properties文件中多寫幾行,格式為:要轉(zhuǎn)化的屬性名=負責轉(zhuǎn)化的Converter類(指定包名).注釋符號為#但是如果有多個Action類都包含同一個數(shù)據(jù)類型且都要對該數(shù)據(jù)類型進行轉(zhuǎn)換,那么按照局部類型轉(zhuǎn)換的思想則需要配置多個XAction-conversion.properties文件,這樣顯然過于復雜且難于管理.在這種情況下就需要用到
2、全局數(shù)據(jù)類型轉(zhuǎn)換了.具體操作如下:??????將先前Action類目錄下的XAction-conversion.properties文件中的內(nèi)容注釋掉??????在WEB-INF/classes目錄下新建一個xwork-conversion.properties文件(在MyEclipse中可直接新建在src文件夾下),寫上:自定義類型的包名+類名=執(zhí)行轉(zhuǎn)換的類的包名+Converter類名,如:com.test.bean.Point=com.test.converter.PointConverter2.這樣所在Action類在執(zhí)行set和get方法時都要首先要讀取classes?目錄下的x
3、work-conversion.properties文件(如果存在),以確定當前的屬性要不要執(zhí)行類型轉(zhuǎn)換,如果需要則調(diào)用properties文件指定的Converter類進行轉(zhuǎn)換,這樣就實現(xiàn)了全局的數(shù)據(jù)類型的轉(zhuǎn)換.???在上一文中,我們寫局部數(shù)據(jù)類型轉(zhuǎn)換用到的PointConverter.java類是繼承了DefaultTypeConverter類,在里面重寫了publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType)方法,用if(Point.class==toType)和if(String.class==toType)來決定轉(zhuǎn)
4、換的方向.而在實際的項目開發(fā)中一般不會這樣來寫,而是用PointConverter.java去繼承StrutsTypeConverter類,在子類中重寫StrutsTypeConverter類的publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass)方法和publicStringconvertToString(Mapcontext,Objecto)方法.方法中參數(shù)context為上下文信息,convertFromString是將客戶端發(fā)進來字符串形式的數(shù)據(jù)轉(zhuǎn)化為自定義的對象,其參數(shù)values為一個字符串數(shù)組
5、,(如果是一個字符串則是長度為一的字符串數(shù)組,以字符串數(shù)組的形式寫出是為了增加程序的通用性).convertToString方法是將對象轉(zhuǎn)化為字符串并用于顯示頁面的輸出.如此轉(zhuǎn)換的類的代碼:-------------------------------------------------------------------------------------------------//PointConverter2.javapackagecom.test.converter;importjava.util.Map;importorg.apache.struts2.util.StrutsTy
6、peConverter;importcom.test.bean.Point;publicclassPointConverter2extendsStrutsTypeConverter{???@Override???publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass){??????Pointpoint=newPoint();??????String[]paramValues=values[0].split(",");??????intx=Integer.parseInt(paramValues[0]);???
7、???inty=Integer.parseInt(paramValues[1]);??????point.setX(x);??????point.setY(y);??????returnpoint;???}???@Override???publicStringconvertToString(Mapcontext,Objecto){??????Pointpoint=(Point)o;??????intx=point.get