一篇文章搞定Struts2的類型轉換。本站提示廣大學習愛好者:(一篇文章搞定Struts2的類型轉換)文章只能為提供參考,不一定能成為您想要的結果。以下是一篇文章搞定Struts2的類型轉換正文
前言
我們知道經過HTTP提交到後台的數據,都是字符串的方式,而我們需求的數據類型當然不只字符串類型一種。所以,我們需求類型轉換!上面來看看詳細的引見吧。
一、類型轉換的意義
一切的MVC框架,處理的都是表現層的處理方案,都需求搜集用戶懇求參數,並把參數提供應控制器。但是,在Web使用中一切的懇求參數都是字符串類型的,Java是強類型的言語,如何將字符串轉換為Java類型,這是框架要處理的一個問題。
例如,一個注冊頁需求輸出年齡、日期等。這時分就需求將日期、年齡字符串轉換為相應類型。
二、Struts2的類型轉換器
Struts2提供了內置的類型轉換器,關於大局部類型,開發者無需自定義類型轉換器,運用內置的類型轉換器就可以完成我們需求的類型轉換。
內置類型轉換器有:
1.boolean和Boolean
2.char和Character
3.int和Integer
4.long和Long
5.float和Float
6.double和Double
7.date
比方我們在頁面輸出20,傳輸到後台一定是字符串類型。但是Struts框架的內置類型轉換可以把20轉換為int型。但是假如我們轉換abc這樣的為int是行不通的。
三、自定義類型轉換器的完成
1、需求剖析
比方我們需求在頁面上輸出(2,3)這樣一個坐標點,將該點轉換為一個點對象類型。
2、完成
當內置類型轉換無法滿足我們的需求的時分,需求用到自定義類型轉換。Struts2的類型轉換時基於ONGL的,在ONGL中有一個接口TypeConverter,該接口中有一個辦法converterValue,該辦法很復雜。其中還有一個默許的完成類DefaultTypeConverter,經過該類來完成類型轉換。
package com.study.converter; import java.util.Map; import com.study.bean.Point; import ognl.DefaultTypeConverter; public class PointConverter extends DefaultTypeConverter{ public Object convertValue(Map context, Object value, Class toType) { if(toType==Point.class){ String []strs = (String[])value; String []xy = strs[0].split(","); int x = Integer.valueOf(xy[0]); int y = Integer.valueOf(xy[1]); Point p = new Point(); p.setX(x); p.setY(y); return p; }else if(toType==String.class){ Point p = (Point) value; return "["+p.getX()+","+p.getY()+"]"; }else{ return null; } } }
這就是轉換器的一個復雜完成,把頁面傳輸的值停止解析,最後轉換為Point類型。然後要讓類型轉換器起作用,需求停止配置
struts2提供了兩種配置辦法:
a.部分:首先創立文件命名如Actionname-conversion.properties,外面的內容為 屬性=類型轉換器(ponit=com.study.converter
)需求寫在包上面
b.全局:首先創立文件命名如xwork-conversion.properties,內容為com.study.bean.Ponit=com.study.converter
。文件需求寫在src上面
3、Struts的完成
struts2中有一個StrutsTypeConverter類,它是承繼DefaultTypeConverter。運用它來自定義轉換器愈加方便,示例代碼如下:
package com.study.converter; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.study.bean.Point; public class PointConverter extends StrutsTypeConverter{ public Object convertFromString(Map map, String[] obj, Class toType) { String []strs = obj; String []xy = strs[0].split(","); int x = Integer.valueOf(xy[0]); int y = Integer.valueOf(xy[1]); Point p = new Point(); p.setX(x); p.setY(y); return p; } public String convertToString(Map map, Object obj) { Point p = (Point) obj; return "["+p.getX()+","+p.getY()+"]"; } }
4、類型轉換器的錯誤處置
Struts2提供了一個名為conversionError的阻攔器,假如類型轉換呈現錯誤,阻攔器擔任將錯誤封裝成表單錯誤(filederror),並將錯誤信息放入ActionContext中。
如何那麼改動默許類型轉換錯誤的錯誤提示信息?
辦法一:
首先創立一個資源文件Mess.properties,放在src上面
然後掩蓋xwork-core-2.3.31\com\opensymphony\xwork2\xwork-messages.properties外面的屬性xwork.default.invalid.fieldvalue。即在Mess.properties中寫入如下參數
xwork.default.invalid.fieldvalue="{0}"參數轉換失敗.
然後指定我們的資源文件,在struts.xml中(不需求加文件後綴)
<constant name="struts.custom.i18n.resources" value="Mess"></constant>
辦法二:
為某個action的字段提供錯誤信息提示
定義Actionname.properties文件,添加配置——Invalid.fieldvalue.屬性名=提示信息
總計
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或許任務能帶來一定的協助,假如有疑問大家可以留言交流。