SSH學習(四)Struts2類型轉換

原文來自搬磚工,如需轉載請註明出處


博主SSH框架專欄請戳這裏http://blog.csdn.net/column/details/14227.html

一、類型轉換的意義

所以的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.屬性名=提示信息

下篇文章學習Struts2的文件上傳功能

發佈了72 篇原創文章 · 獲贊 319 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章